מאקרו רץ בלולאה
-
@ארי כתב במאקרו רץ בלולאה:
@one1010 אכן כך.
יש פתרון?!
עשיתי את הקוד הבא, אבל הוא כותב לי שלא נמצאו תאים...
Sub SumYellowCells()
Dim rng As Range
Dim cell As Range
Dim sum As DoubleSet rng = Range("A7:AG355") ' For Each cell In rng.SpecialCells(xlCellTypeConstants, 2).Cells If cell.DisplayFormat.Interior.Color = RGB(255, 255, 0) Then ' זיהוי תאים מודגשים בצהוב If cell.HasFormula Then ' בדיקה אם התא הנוכחי הוא מחזורי If InStr(1, cell.Formula, "SUM(") = 0 Then ' בדיקה אם התא הוא מסכם עצמאי sum = sum + cell.Value End If End If End If Next cell MsgBox "The sum of yellow cells that are not circular references is: " & sum
End Sub
רק שים לב כמו שכתבתי למעלה שהוא מציג גם תאריכים לא צמודים.
כמו איזה?
-
@ארי כתב במאקרו רץ בלולאה:
@one1010 מה אתה מנסה לכתוב? שהוא יעבור בלולאה רק על התאים שאתה בוחר?
לא בלולאה, אלא שיחפש מחזוריות בתאים צבועים מתוך כל הגליון
תאריכים לא צמודים כוונתי הייתה שאם לדוג' בתא B12 יש תאריך ובתאים D12 וF12 יש אותו תאריך הוא יודיע עליו, ולאו דוקא בתאים צמודים זל"ז.
אני לא רוצה שיזהה 15-18 לחודש הראשון אלא מחזוריות בחודשים נפרדים. כמו 15 לחודש בראשון ובשני ובשלישי וגם 15 בראשון 16 בשני ו17 בשלישי
-
@one1010 הקוד הזה עובד לך?
Sub SumYellowCells() Dim rng As Range Dim cell As Range Dim sum As Double Set rng = Range("A7:AG355") For i = 1 To rng.Count If rng.Cells(i).Interior.Color = RGB(255, 255, 0) Then If rng.Cells(i).HasFormula = False Then If InStr(1, rng.Cells(i).Formula, "SUM(") = 0 Then sum = sum + rng.Cells(i).Value End If End If End If Next i MsgBox "The sum of yellow cells that are not circular references is: " & sum End Sub
הוא אמור לעבור בלולאה על כל התאים בצבע צהוב (בטווח שבין A7 לAG355) ולסכם אותם (בתנאי שהם לא נוסחה ולא סיכום).
משום מה נראה לי שהקוד שהבאת בתחילת השרשור לא קשור לקוד שאתה צריך...
הקוד ההוא עובר בלולאה (בשביל לבדוק כמה תאים חייבת להיות לולאה שעוברת עליהם) ואם הוא מוצא שלושה תאים עם אותו תאריך הוא מקפיץ הודעה, וכן אם הוא מוצא שלושה תאריכים שיש ביניהם אותו הבדל של ימים גם כן מקפיץ הודעה.
איך זה קשור לקוד שהבאת מקודם שמסכם את כל התאים בצהוב?@one1010 כתב במאקרו רץ בלולאה:
וגם 15 בראשון 16 בשני ו17 בשלישי
נראה לי שבשביל זה אתה צריך משהו יותר מתוחכם ממה שאני יודע....
-
@one1010 כתב במאקרו רץ בלולאה:
For i = 1 To rangeToCheck.Count - 2
For j = i + 1 To rangeToCheck.Count - 1
For k = j + 1 To rangeToCheck.Count- השורות האלו גורמות לי צמרמורת...לכאורה יש כאן חוסר יעילות גדול בכמות הבדיקות שנעשית.
- אני מודה שלא התעמקתי בכל השרשור, וממילא לא הבנתי מה בדיוק הבדיקה, אבל אני מוכן לעזור לך אם תפרט בדיוק מה אתה רוצה שהקוד יעשה, מא' ועד ת'.
-
@OdedDvir כתב במאקרו רץ בלולאה:
אני מודה שלא התעמקתי בכל השרשור, וממילא לא הבנתי מה בדיוק הבדיקה, אבל אני מוכן לעזור לך אם תפרט בדיוק מה אתה רוצה שהקוד יעשה, מא' ועד ת'.
הקוד שאני רוצה הוא לכאורה מאד ארוך, לכן זה יהיה מוגזם שתעזור לי בהכל....
אבל אולי שלב שלב...
אני רוצה קוד שיזהה תאריכים מסומנים בצהוב ובמידה וביניהם יש מחזוריות מסויימת שחוזרת על עצמה 3 פעמים שיסמן אותם.
לדוגמא 15.01 15.02 15.03
וגם 15.01 16.02 17.03
וכן עוד כאלו בסגנון הזה -
@one1010 אני לא מפחד מלכתוב קוד ארוך, אבל אני נרתע מלהתחיל לכתוב אפילו שורה אחת בלי לדעת בדיוק מה המטרה. אתה יכול להגדיר בדיוק את סוגי המחזוריות המבוקשים?
לדוגמא:
א. דילוגים של טווח קבוע של ימים, כשהטווח נע מ-1 עד 25
ב ימים זהים בחודשים עוקבים
ג. ימים עוקבים בחודשים עוקבים
וכו' -
@one1010 כתב במאקרו רץ בלולאה:
נראה לי שאתה יודע את התשובה...
אני לא יודע את התשובה.
אם זה אתה, אז היה מצופה שתשאל בתכנות ושתנסה כן להתעמק באיך ולא רק בתוצאה הרצויה.
בכל מקרה השאלה הפותחת מאוד לא שקופה, נראה שהחלטת שבדרך הזו תקבל יותר עזרה. אם אתה צודק, זה לא ראוי, ואם אתה לא צודק חבל על הסיבוב המיותר.אולי זה בגלל זה:
הקוד שאני רוצה הוא לכאורה מאד ארוך, לכן זה יהיה מוגזם שתעזור לי בהכל....
אני חושב שזה דוקא לא קוד ארוך.
אנא פתח נושא חדש ותשתדל להיות שקוף ומדוייק כל הניתן.
אל תתבייש ואל תסתיר. -