הפונקציה Evaluate ב‑VBA: המדריך לעבודה מהירה עם נוסחאות אקסל ישירות מתוך הקוד
הפונקציה Evaluate היא אחת הפונקציות השימושיות, אך הפחות מוכרות ב-VBA.
היא נפוצה במיוחד באוטומציות שמבוססות על נוסחאות אקסל, ומאפשרת לבצע חישובים, להפעיל פונקציות אקסל ישירות מתוך VBA, להשתמש בביטויים כמשתנים דינמיים בתוך הקוד עצמו,
ומזכירה במידה רבה את הפונקציה Application.WorksheetFunction.
במילים פשוטות, Evaluate מקבלת נוסחה כתובה בדיוק כמו בשורת הנוסחאות של אקסל, ומאפשרת להריץ אותה מתוך עורך ה-VBA, בלי שנצטרך להכניס את הנוסחה ישירות לתא.
הפעולה הזו חוסכת התמודדות עם בניית ביטויים מורכבים, או טיפול מסורבל בטווחים, מכיוון שאפשר פשוט לכתוב נוסחה בגיליון, להעתיק ולהדביק אותה בקוד, בלי להתעסק עם כל פרמטר בנפרד.
התחביר של הפונקציה
Evaluate(Expression)
כאשר Expression הוא מחרוזת שמכילה נוסחת אקסל תקנית, בדיוק כפי שהיינו כותבים ישירות בגליון.
בואו נראה דוגמה פשוטה, של הוספת מספר רץ לטבלה, שמתחילה מהשורה השנייה.
ניתן לכתוב לולאה שתזין את הערכים המתאימים כערך או כנוסחה.
באופן הבא:
With Range("a2:a11")
.Formula = "=row()-1"
.Copy
.PasteSpecial Paste:=xlPasteValues
End With
Application.CutCopyMode = False
בפועל, הפונקציה מדביקה את הנוסחאות בתוך התאים, ואז הופכת אותם לערכים, כדי לא להכביד על המערכת.
הערה: כמובן שבמקרה הזה הרבה יותר פשוט לכתוב לולאה שמזינה ערך לתא, ולא נוסחה,
אבל מכיוון שקיימים מקרים שבהם נרצה להשתמש דווקא בנוסחאות, בחרתי להדגים באמצעות נוסחה פשוטה.
וכאן באה הפונקציה Evaluate לעזרתנו:
במקום להדביק פונקציה בגיליון, ואז להעתיק ולהדביק כערכים, נשתמש ב-Evaluate, שמבצעת את כל החישוב ישירות ומחזיר את הערכים, ללא צורך בהדבקת נוסחה:
Range("a2:a11") = Evaluate("row(a2:a11)-1")
היתרון בשיטה הוא שלא צריך לבקש מהקוד שקודם יזין את הנוסחה לגיליון ואז יעתיק וידביק כערכים, והתוצאה מתקבלת ישירות בתא.
יתרון משמעותי נוסף הוא המהירות, מכיוון ש Evaluate מבצעת את החישוב באופן מרוכז.
היתרונות של Evaluate
מהירות – הפונקציה מאפשרת לחשב תוצאות ישירות, ללא צורך בלולאות או הקצאת משתנים מיותרים.
פשטות – במקום לכתוב קוד VBA מורכב, אפשר לנצל את הפונקציות המובנות של אקסל.
גמישות – ניתן להשתמש בה כדי להמיר נוסחאות לאוטומציה, במיוחד כשעובדים עם טווחים דינמיים.
מתי לא כדאי להשתמש ב-Evaluate?
למרות היתרונות שלה, Evaluate לא תמיד תהיה הבחירה הטובה ביותר:
- אם מדובר במספר נתונים גדול, ייתכן שעדיף להשתמש במערכים ב-VBA, ולא להסתמך על Evaluate.
- כאשר רוצים להשתמש בקוד קריא יותר – לפעמים פונקציות VBA רגילות ברורות יותר לשימוש.
- כשעובדים עם קוד שצריך להיות נייד בין גרסאות אקסל שונות – ייתכנו מקרים שבהם Evaluate לא תפעל כמצופה.