כיצד נהפוך מחרוזת טקסט באמצעות VBA
לפני זמן מה התקשר אליי לקוח שביקש את עזרתי.
הוא סיפר לי שהוא עובד עם תוכנה מסוימת, שיודעת ליצא נתונים לקובץ אקסל (כיום כמעט כל התוכנות עושות זאת). על הנתונים האלה הוא אמור לערוך עיבודים שונים, בעיקר עם טבלאות ציר, ועל סמך החישובים האלה להסיק מסקנות ניהוליות שונות.
עם הנתונים באנגלית, לא הייתה בעיה, אולם הנתונים בעברית יצאו, למרבה הצער, הפוכים!
מובן מאליו שלא ניתן היה לעבוד בצורה זו.
הלקוח, שזכר אותי מעבודות קודמות שעשיתי לו, ביקש ממני לכתוב לו קוד שיהפוך את כיוון הטקסטים בעברית.
נזכרתי שבראשית דרכי ב VBA כתבתי קוד שעושה בדיוק את זה, אבל בדרך מסובכת יחסית – מאקרו שבודק את אורך המחרוזת (באמצעות הפונקציה LEN), רץ בלולאה שאורכה כאורך המחרוזת ושולף בכל פעם תו אחד מהסוף להתחלה (באמצעות הפונקציה MID), ואת התו הזה מדביק במחרוזת חדשה, שמשרשרת את התווים בסדר הפוך, ליצירת טקסט עברי תקין.
אז תודה לאל, היום כבר אין בזה צורך לעבוד כל כך קשה, וניתן לעשות זאת בפקודת VBA אחת ויחידה: StrReverse
לדוגמה:
ActiveCell = StrReverse(ActiveCell)
מכיוון שאצל הלקוח, היה צורך להפוך עמודה שלמה, הכנסתי את הקוד לתוך לולאה.
המאקרו שכתבתי נראה בערך כך:
For Each CL In Range("a1:a10") CL.Value = StrReverse(CL.Value) Next
כמובן שבקוד המקורי ערכתי בדיקה למצוא את גודל הטווח האמיתי, ולא הסתפקתי בטווח מוגדר מראש, כפי שכתבתי בדוגמה שלעיל, שכל מטרתה היא להבהיר את דרך העבודה.
לאלו מכם שמעדיפים דווקא את לולאת For I, הקוד הבא יתן את אותה התוצאה:
LastRow = Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To LastRow Cells(i, 1) = StrReverse(Cells(i, 1)) Next
על המשתנה LastRow והדרך שבה חישבתי אותו, תוכלו לקרוא במאמר הזה