מחיקת נתונים

יש לי טבלה המכילה נתונים, חלקם שווים ל- 0.
הטבלה (או טווח הנתונים) קרוי TB .
מבקש עזרה בקוד שיבחר את הטבלה (לפי שמה) ,יעבור על התאים ובכל מקום שמוצג 0 - ימחק את התוכן (יסיר את הנוסחה).
מצורפת דוגמה.
7/2010
 

קבצים מצורפים

  • אפס.xlsx
    KB 9.7 · צפיות: 2

ziv98

Member
קוד:
For Each cl In Range("TB").Cells
    If cl.Value = 0 Then
         cl.Value = ""
    End If
Next
 
תודה רבה |!| |!|
עובד אלא שלוקח לו זמן רב. בטבלה TB - נמשך 12 שניות , אולי לא משמעותי אבל...
בפועל הטבלאות שלי יותר דומות לטבלה TC בקובץ המצורף.
וזה לוקח 'ים' זמן עד שנאלצתי לשבור את הריצה.
הסיבה ידועה לי. אני מגדיר את הטווח לכל אורך השורות. בטבלה TC - שורה 28 עד 44, אז ברור כי הוא עובר תא אחר תא...
אפילו כשהגדרתי רק טווח מסוים (הצהוב) בטבלה האמיתית שלי, לקח לו 1:53 דקות כדי לסיים את המשימה.
ואני שואל האם ישנה שיטה אחרת ?
אגב, למעשה רק התחום הצהוב צריך להיות מטופל. אבל התחום הזה אינו קבוע, הוא יכול להתרחב עד עמודה X, למשל.
פשוט נוח לבחור שורות ולהגדיר שם. ולא לבחור בדיוק את גבולות הטבלה שאיננה זהה בכל הטבלאות.
ולא הייתי רוצה להגדיר שם באופן שונה (ממה שהורגלתי).
אז...האם יש דרך אחרת ??
 

קבצים מצורפים

  • אפס1.xlsx
    KB 10.5 · צפיות: 2

ziv98

Member
1. אתה יכול להגדיר ב - RANGE כל מקטע שתרצה. אתה יכול לשלוף X עמודות מתוך שם. אתה יכול להגדיר שם לשימוש שלך + שם נוסף לשימוש בקוד.
2. בקובץ המקורי ששלחת - הביצוע הוא מיידי. אם רק קטע הקוד הזה לוקח לך 12 שניות - בדוק את האופציה לעבור לחישובים ידניים בתחילת הקוד ולהחזיר לאוטומטי בסופו (הקלט קטע קוד כזה, והעתק את השורות שנוצרו לתחילת / סיום הקוד). אם זה חלק מקוד ארוך יותר - בדוק אם הזמן הארוך נובע מהקטע המדובר או מקטע אחר. אם קובץ הדוגמה לוקח 12 שניות - כנראה הגיע הזמן להחליף מחשב :)
 
  1. אפשר טיפ איך לשלוף X עמודות מתוך שם ?
  2. אומנם כאשר הגדרתי חישוב ידני - התוצאה התקבלה מיידית! ואני תוהה מה אקסל עושה לא טוב... כאשר ההגדרה 'אוטומטי' ?
  3. בדקתי ומצאתי שגם במצב של חישוב אוטומטי - הקוד מסיים מיידית, אבל בתנאי שרק החוברת הנוכחית פתוחה.
    כאשר חוברת העבודה 'האמיתית' שלי (שמן הסתם כבדה...) פתוחה, אף שאני לא נוגע בה, אזי לוקח לקוד 12 שניות.
  4. לגבי מחשב חדש...:) אני כמעט נבוך לספר לך שהוא שוכב וממתין כבר 3 חודשים..., I7-11700K ....לא מוצא זמן להעביר חומרים...
 

ziv98

Member
1. RANGE מקבל ערך טקסט. כל דבר שאתה יודע לבצע על טקסט - אתה יכול לבצע ב - RANGE. למשל בחירת השם TB, אבל רק מעמודה H:
קוד:
Sub baba()
    x = Range("TB").Address
    MsgBox x
    x = Replace(x, "G", "H")
    MsgBox x
    Range(x).Select
End Sub
2. אקסל מחשב את החוברת בכל פעם שמשתנה ערך אחד. בחוברת עם חישובים רבים, ובפרט פונקציות מסויימות (VLOOKUP למשל) - בכל החלפת אפס בכלום - החוברת מחושבת מחדש. בד"כ אם כבר עדכנת לחישוב ידני <> אוטומטי - כדאי להוסיף גם שהמסך לא יתעדכן בהתחלה ולשחרר בסוף: Application.ScreenUpdating
3. יש כאלה חוברות... מה לעשות
 
תודה !! וברשותך שאלה..., מדוע הקוד הזה אינו עובד ?
קוד:
For Each cl In ActiveWindow.Selection

cl = ActiveCell.Formula
    If LCase(Left(cl, 3)) = "=or" Then
        ActiveCell.FormulaR1C1 = "=sum(RC1:RC3)"
    End If
Next
אני בוחר טווח ומבקש ממנו שיעבור על התאים ויחליף כאשר התנאי מתקיים. הוא אומנם עובר על כל הטווח אבל מבצע את המשימה פעם אחת בלבד...
מה לא בסדר ?
 
בלית ברירה מצרף את הקובץ ללא הקוד (בשרשור למעלה).
 

קבצים מצורפים

  • דוגמה.xlsx
    KB 10.7 · צפיות: 1

ziv98

Member
איזה סלט....
אם אתה בתוך לולאה אז active cell (אלא אם עשית עליו select ואין בזה צורך) לא יכול להופיע בשום מקום בקוד.
cl עצמו פעם אחת הוא תא בתוך טווח ופעם שניה טקסט של פונקציה - אז מהו באמת ?

קוד:
For Each cl In ActiveWindow.Selection
    If LCase(Left(cl.Formula, 3)) = "=or" Then
        cl.FormulaR1C1 = "=sum(RC1:RC3)"
    End If
Next
 
אכן כן, אחרת היה עובד?...
תודה על ההסבר, זה עוד לא יושב...
אלף תודות על העזרה !
ולגבי המטאפורה... - סתם שתדע... אני אלוף :), כך אומרים. הכל קצוץ ומדוד, והתיבול פיצוץ.
אבל מחוץ לצלחת... ברור שפחות רצוי...
ושוב תודה !
 
למעלה