פונקציית sum בפקודת מאקרו

rely25

Member
ב"ה

שלום, שבוע טוב

הכנתי פקודת מאקרו ובה אמור להופיע בסוף הטבלה פונקציית סיכום פשוטה שהטווח שלה הוא בהתאם לאורך הטבלה.
יש במאקרו משתנה עם מספר שורה שבה מתחילה הטבלה
האם יש דרך "לשתול" את המשתנה בתוך פקודה כזו
Range("d" & ActiveCell.Row).FormulaR1C1 = "=SUM(R[-39]C:R[-1]C)"
(שבמקום 39- יופיע משתנה בהתאם לשורה הראשונה בטווח שאותו ברצוני לסכם)?

תודה
 

מיכאל אבידן

Member
מנהל
ב"ה

שלום, שבוע טוב

הכנתי פקודת מאקרו ובה אמור להופיע בסוף הטבלה פונקציית סיכום פשוטה שהטווח שלה הוא בהתאם לאורך הטבלה.
יש במאקרו משתנה עם מספר שורה שבה מתחילה הטבלה
האם יש דרך "לשתול" את המשתנה בתוך פקודה כזו
Range("d" & ActiveCell.Row).FormulaR1C1 = "=SUM(R[-39]C:R[-1]C)"
(שבמקום 39- יופיע משתנה בהתאם לשורה הראשונה בטווח שאותו ברצוני לסכם)?

תודה
.
אצלנו נהוג להצמיד את הקובץ ולהסביר/להציג בתוכו את הנתונים שאמורים להיות מסוכמים.
 

rely25

Member
ב"ה

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

תודה
 

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

  • מאקרו לסיכום.xlsx
    KB 9 · צפיות: 3

ziv98

Member
בהנחה שהדוגמה מייצגת (!) כלומר יש בצד הנתונים מספור של השורות הרלוונטיות, ואתה יודע איפה נמצא תא הסיכום (למשל c24), אז:

קוד:
    Range("C24").Select
    r = ActiveCell.Offset(-2, -1)
    ActiveCell.FormulaR1C1 = "=SUM(R[-" & r + 1 & "]C:R[-1]C)"
 

rely25

Member
ב"ה

תודה רבה.
עזר לי מאוד.

אם אני רוצה ליצור פונקציה עם טווח מקובע ($), איך אני מכניס משתנה לטווח (כמו בדוגמא למעלה אבל שהפונקציה תהיה =SUM($C$7:$C$23))?
 

ziv98

Member
את הפונקציה formulaR1C1 ניתן לכתוב בשתי צורות:
1. הפנייה יחסית - בתוך סוגריים מרובעים כמה ימינה / שמאלה, למעלה / למטה לזוז
2. הפנייה מקובעת - ללא סוגריים מרובעים - מספר עמודה ושורה

למשל - עמוד בתא B1 והקלט את שני המאקרואים =A1 פעם אחת עם קיבוע ופעם שניה ללא. תקבל:
קוד:
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "=RC[-1]"
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=R1C1"

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

אופציה נוספת תהיה שימוש ב - formula ללא R1C1, למשל:
קוד:
    Range("B1").Select
    ActiveCell.Formula = "=$A$1"

וליצור שרשור מתאים.
 

rely25

Member
ב"ה

תודה על הפירוט.

אני רק לא מצליח להבין איך לשרשר.
בדוגמא הזו - ActiveCell.FormulaR1C1 = "=SUM(R30C6:R40C6)", אם אני רוצה שהשורה 30 תהיה תלוי במשתנה "a" איך אני משחיל אותו לפקודה?
או באפשרת השניה שהצעת (ללא r1c1)
(ניסיתי עם & ועם או בלי גרשיים ולא הצלחתי)

תודה
 

rely25

Member
ב"ה

עוד שאלה בנושא זה

כשרוצים להכניס טקסט אם גרשיים בנוסחא (לדוגמא "תשפ"ב") צריך להוסיף עוד גרשיים ("תשפ""ב").
אני רוצה להכניס לנוסחא בפקודת מאקרו משתנה שמכיל גרשיים, אבל אני מקבל הודעת שגיאה, כנראה בגלל שחסר גרשיים.
יש דרך לפתור את זה?


תודה
 

rely25

Member
ב"ה

האם יש דרך להכניס בפקודת מאקרו טקסט עם גרשיים?
למשל להכניס למאקרו של כלי פריסה

b = "תשפ""ב"
ActiveWorkbook.SlicerCaches("Slicer_שנה1").VisibleSlicerItemsList = Array( _
"[טבלה6].[שנה].&[" & b & "]")
(איך מעתיקים קוד בצורה יותר ברורה כמו שהועתק ע"י ziv98?)

תודה
 
למעלה