עזרה | משתנה חודשים עוקבים שחוזר לתחילת שנה
-
אני צריך ליצור משתנה במאקרו אקסל שיכיל מספרי חודשים מ01 עד 12 שכל פעם שהוא מגיע ל-12 , הבא בתור יהיה 01.
כמו המאקרו הבא שמוסיף בתוך לולאה כל פעם עוד אחד למספר ובכל פעם שיש הודעה המספר משתנה:
For I = 1 To 12 MsgBox I Next I
אבל שיחזור תמיד לחודש 1 (וגם שלא יהיה בתוך לולאה).
אשמח לדעת אם מישהו מכיר אופציה כזו. -
אתה יכול לכתוב ככה:
Sub x() a = 1 b = 12 c = a Mod b ' אם c = 0 תדפיס 12 אם לא תדפיס c If c = 0 Then MsgBox b Else MsgBox c End If End Sub
כאשר i יהיה תמיד פחות מ 12 אם תכתוב:
Sub x() a = 13 b = 12 c = a Mod b ' אם c = 0 תדפיס 12 אם לא תדפיס c If c = 0 Then MsgBox b Else MsgBox c End If End Sub
תקבל 1
וככה אתה יכול תמיד להעלות את a ב 1 -
אני רק ממשיך את @ivrtikshoret :
i = 1 Do If i < 13 Then MsgBox i Else MsgBox i Mod 12 End If i = i + 1 Loop
-
תודה לכולם על ההשקעה בעזרה, אבל עדיין לא הגעתי לתוצאה.
אנסה לשאול את השאלה מכיוון אחר (עם דוגמה אחרת).
נניח שהשעה היא עכשיו 11, ואני רוצה שיהיה כתוב בתא מקביל את השעה בפריז, 4 שעות קדימה. (שעה 3)
איך אני מכניס את זה לקוד?ועכשיו לחודשים:
נניח שאנחנו בחודש 11 ואני רוצה שיהיה כתוב בתא מקביל את החודש שיגמר הסמסטר, 4 חודשים קדימה. (חודש 03)האם יש משתנה שמכיר מסגרת כזו?
-
אם הבנתי את כוונתך (אתה קצת שאלת בפורמט בעיית הXY...)
אתה רוצה להוסיף מספר למונה עם גבול מסויים, שבעת מעבר הגבול הספירה חוזרת להתחלה.
הדרך הפשוטה והאנושית לזה היא ככה,
מספר חדש: מספר נוכחי + הגדלה
אם מספר חדש > תקרה, מספר חדש: מספר חדש - תקרה.בתכנות משתמשים עם טריק מתמטי לזה שנקרא מודולו.
מודולו מחזיר שארית, כלומר השארית של 13 לחלק ל12 היא 1, וזה הספירה מחדש.
כותבים ככה:current = 9 'למשל newNumber = (current + 4) Mod 12
-
-
@מטעמים כתב בעזרה | משתנה חודשים עוקבים שחוזר לתחילת שנה:
אנסה לשאול את השאלה מכיוון אחר (עם דוגמה אחרת).
נניח שהשעה היא עכשיו 11, ואני רוצה שיהיה כתוב בתא מקביל את השעה בפריז, 4 שעות קדימה. (שעה 3)
איך אני מכניס את זה לקוד?ועכשיו לחודשים:
נניח שאנחנו בחודש 11 ואני רוצה שיהיה כתוב בתא מקביל את החודש שיגמר הסמסטר, 4 חודשים קדימה. (חודש 03)אני מניח מניסוח השאלה שהוא עדיין מחפש רמז לתוצאה הסופית.
וזה קורה הרבה פעמים בפורום, שאנשים נוטים להסביר את מה שהם שואלים, ברמז או בדבר הדומה לדומה.
ואחרי 5-10 תשובות, כששואלים את השאלה בצורה ישירה. ב2 תגובות מתקבלת התשובה. -
@dovid כתב בעזרה | משתנה חודשים עוקבים שחוזר לתחילת שנה:
אם הבנתי את כוונתך (אתה קצת שאלת בפורמט בעיית הXY...)
ממש לא שאלתי בפורמט המדובר... פשוט ראיתי שלא הבינו את כוונתי אז עברתי ל-Y.
כיוון שהחברים כאן דנים בשאלתי אם היא X או Y.
אני אפרוס בפניכם בדיוק מה אני צריך, אבל זה קצת ארוך, אם יש לכם סבלנות. (אתם שאלתם ..)אני באמצע לכתוב את הקוד הבא:
יש לי תיקיה במחשב, בתוך התיקיה יש 12 תיקיות משנה שכולם מסתיימים ב-2 תווים המכילים שמות של חודשים " 01", "02" וכן הלאה.
הצורך שלי הוא לפתוח במכה אחת 12 קבצים (קובץ אחד בודד שנמצא בכל תיקיה X12) - יש להם מכנה משותף מסוים שלכולם יש אותה סיומת: "csv." ולשם כך יצרתי את המאקרו הבא, שעובד מצוין רק עד הקטע שהוא פותח את הקובץ הראשון. ועל מנת להמשיך הגעתי לפורום הנכבד שלנו שיאירו את עיני. אז הנה הקוד:
Sub PK12() Dim B_tikia As FileDialog Dim M_tikia As String Dim ntiv_M As String Dim ntiv_H As String Dim mon_A As String 'בחר תיקיה ראשונה מתוך 12 בחלון שיפתח Set B_tikia = Application.FileDialog(msoFileDialogFolderPicker) B_tikia.Title = "בחר תיקיה המכילה את קבצי חודש 09 " 'פתח חלון שאילתא למשתמש B_tikia.Show 'הכנס למשתנה את נתיב התיקיה שנבחרה M_tikia = B_tikia.SelectedItems(1) 'בדיקה לקובץ אפשרי בתוך התיקיה ntiv_M = M_tikia & "\" & "*.csv" 'נתיב חדש המספק את השם של הקובץ ntiv_H = M_tikia & "\" & Dir(ntiv_M) 'פתיחת הקובץ If Dir(ntiv_M) <> "" Then Workbooks.Open ntiv_H 'משתנה 2 תוים אחרונים בסוף נתיב התיקיה mon_A = Right(M_tikia, 2) End Sub
המשתנה "mon_A" מכיל את החודש הראשון ואני מחפש משתנה שיקצר לי את הקוד.
-
@מטעמים זה המקרה הכי טוב של בעיית הXY.
בשאלה הראשונה במבט ראשון אתה רק שואל איך להוסיף 0.
אבל אתה מוסיף שמה עוד שתי נקודות קטנות: א. שיחזור ל12 ב. "גם לא בתוך לולאה"
יאהוו, אין סיכוי להבין את שתי הנקודות!
בטח שמבינים צורך להוסיף על 12 ולהגיע חזרה ל1 אבל עבור מה, מה רע בלולאה? למה להתחיל מהאמצע ולא מ1?
מפה מתחיל אי הבנה ארוך.כעת אחרי שהסברת נשארו קצת שאלות:
למה שיבחר תיקיה של 09 ולא את תיקיית האב ואז תעשה לולאה מ01 עד 12 בלי שום בעיה?
ועכ"פ אם זה הצורך, אז אתה צריך לקצוץ מהנתיב את התיקיה הנוכחית (למשל אם זה 09 להגיע לתיקיית האב שמחזיקה את 1-12 להבנתי), ואז לעשות לולאה. -
@dovid כתב בעזרה | משתנה חודשים עוקבים שחוזר לתחילת שנה:
מפה מתחיל אי הבנה ארוך.
תאר לעצמך שאני לא הבנתי כך בפתיחת האשכול. ממש לא העליתי על דעתי לשאול שאלה אחרת ממה שהייתי צריך.
לא תמיד ניתן להכנס לראש של מישהו אחר ולהבין את מהלך חשיבתו.
לפעמים גם יש רצון לנעזרים בפורום לכתוב שאלות תמציתיות ולא להתיש את החברים עם כל התמונה הכוללת שלא תמיד רלוונטית. אני מבין שטעיתי במקרה הספציפי, אבל לא צריך להניח שזה מכוון.למה שיבחר תיקיה של 09
כי זו תמיד התיקיה הראשונה בסדרה (זו תיקיה שמכילה קבצים לפי שנה"לים , הם תמיד מתחילים ב-09 ומסתיימים ב08 של שנה שלאחר מכן)
ועכ"פ אם זה הצורך, אז אתה צריך לקצוץ מהנתיב את התיקיה הנוכחית (למשל אם זה 09 להגיע לתיקיית האב שמחזיקה את 1-12 להבנתי), ואז לעשות לולאה.
ניסיתי את הדרך הזו. לא הצלחתי. בכל אופן, אני מנסה עכשיו את מה שהציע @clickone , תודה בכל אופן.
-
@מטעמים לא עלה על דעתי שזה מכוון או שהייתה לך בכלל ברירה, הייתי הרבה פעמים במקום שלך.
לא ענית עדיין למה לא לבחור את תיקיית האב, וגם מה אכפת אם זה מתחיל ב09 ונגמר ב09 או כל דבר אחר אם בכל מקרה יש שנים עשר תיקיות.
והפתרון של @clickone זה בלי לדעת מה אתה צריך, אם מדובר בתיקיות וזה תמיד 12 הוא לא היה עונה ככה..