התקשרו אלינו: 052-2928949
ימים א'-ה' בין השעות 9:00-17:00

התקשרו אלינו: 052-2928949 א-ה 9:00-17:00

איך להגביר את מהירות ריצת הקוד?

VBA Tip

איך להגביר את מהירות ריצת הקוד?

VBA Tip

הגברת מהירות הריצה של הקוד

כתבתם קוד שנראה טוב, שאפילו עושה את מה שביקשתם ממנו, אבל… לוקח לו שעות לרוץ?
אז קודם כל, הכל בסדר, זה קורה לכולם, בין אם אתם עובדים על מודלים פיננסיים, מנתחים נתונים או מבצעים פעולות אחרות ב-Excel, חשוב להבין שמיטוב קוד VBA הוא צעד חיוני לביצועים אופטימליים.
ועכשיו, הנה כמה טיפים שיעזור לקודים שלכם לרוץ מהר יותר:

רענון המסך

כל פעולה שהקוד מבצע, מוצגת גם באקסל. הדבר גורם להאטה בזמן ריצת הקוד.
ניתן להשתמש בפקודה

Application.ScreenUpdating = False

כדי שהפעולות שמבוצעות על ידי הקוד לא יראו על המסך, עד לסיום הריצה.
לא לשכוח להחזיר את הפקודה ל True בסופה, אחרת לא תראו גם את הפעולות שאתם עושים באקסל…

כיבוי החישובים האוטומטיים

בכל פעם שמוזן ערך, הנוסחאות בגיליון מחושבות מחדש.
ניתן להגיד לאקסל לא לערוך את החישובים עד לסיום הזנת כל הנתונים.
כדי לעצור את החישובים נשתמש בפקודה

Application.Calculation = xlCalculationManual

וכדי להחזיר את החישוב, נשתמש ב

Application.Calculation = xlCalculationAutomatic

השתדלו להמנע מבחירת תאים

בחירת תאים (select/Activate) יכולה להאט מאוד את ריצת הקוד
הקוד הבא, שכותב ב 100,000 השורות הראשונות בעמודה A את המספרים מ-1 ועד 100,000:

For i = 1 To 100000
      Cells(i, 1).Select
      ActiveCell = i
Next

רץ אצלי במשך 4 דקות ו-9 שניות!
ואילו הקוד הזה, שעושה את אותה הפעולה, רק בלי לבחור את התא קודם:

For i = 1 To 100000
      Cells(i, 1) = i
Next

רץ במשך… תחזיקו חזק…
5 שניות בלבד!

אירועים

אירועים הם פעולות שמבוצעות בגיליון באופן אוטומטי, בתגובה לפעולה כלשהי כמו הזנת נתונים, בחירת תא, פתיחה או סגירה של קובץ, מעבר גיליון וכו'.
ניתן לעצור את ריצת האירועים לפני הפעולה שתצית את האירוע (כן, הצתה זו הפעולה של הפעלת מאקרו אירוע…):

Application.EnableEvents = False

ולהחזיר מיד בסיומה:

Application.EnableEvents = True

השתמשו במבנה With

אם אתם פונים פעמים רבות אל אותו האובייקט, הקיפו אותו במבנה WITH, ותחסכו את הפניה המלאה אליו בכל שורה. במקום:

Range("a1").Select
ActiveCell = 1
ActiveCell.Font.Color = vbRed
ActiveCell.Borders.LineStyle = xlSolid

השתמשו ב:

With Range("a1") 
      .Select 
      .Value= 1 
      .Font.Color = vbRed 
      .Borders.LineStyle = xlSolid 
End With

שימוש יעיל במשתנים ולולאות

הכריזו על משתנים מחוץ ללולאה, כדי שלא תחזרו על ההגדרה שוב ושוב. בסיום הלולאה, שחררו את המשתנה מהזכרון

שימוש ב vbNullString במקום שימוש ב ""

vbNullString נחשב קבוע, לעומת "" שהוא מחרוזת באורך אפס, ולכן לאקסל קל יותר להשתמש ב vbnullstring מאשר במחרוזת באורך אפס.

סוג המשתנה

קבעו את סוג המשתנה הנמוך ביותר, שעדיין יכול להכיל את כל טווח הנתונים.

בהכרזת הנתונים, המערכת מקצה מקום בזיכרון. רצוי להקצות מקום שיכיל את סוג הנתון, ולא לתפוס את הזיכרון עם משתנה שמכיל טווח ערכים רחב יותר

השתמשו ככל הניתן בפונקציות המובנות של אקסל

הן תמיד יהיו יותר יעילות מהפונקציות שאתם תכתבו בעצמכם…

הפחיתו פעולות כתיבה וקריאה לקובץ

זו פעולה שגוזלת זיכרון. עדיף לשמור את המידע בזיכרון, ובסוף להזין את כולו בבת אחת חזרה לקובץ.
ככל שתפנו פחות אל חוברת העבודה, כך הקוד ירוץ מהר יותר.
השיטה הטובה ביותר להתמודד עם טווחים היא לטעון אותם אל מערך, לערוך עליו את המניפולציות ולבסוף לטעון אותו בבת אחת אל הגיליון.
יוצא דופן לכלל הזה הוא הסינון. סינון מתקדם מהיר יותר מכל פעולת סינון אחרת, כולל עבודה עם מערכים בתוך העורך עצמו!

 

ולסיכום,

Excel הוא כלי עוצמתי לניתוח נתונים, ובאמצעות השימוש ב-VBA ניתן להרחיב את יכולותיו לאין שיעור,
אך קוד VBA שאינו בנוי כהלכה, יכול לעשות את ההיפך הגמור, ולהאט את העבודה שלכם!
אם תקפידו על הפעלת האסטרטגיות הללו, תוכלו לוודא שהקוד שלכם ירוץ במהירות גבוהה יותר,
ותוכלו להשתמש בפוטנציאל המרבי של Excel.

 

 

דילוג לתוכן