Office Forum Q&A

Welcome to our Office forum

Technical questions can be asked about Excel, Access, Word, PowerPoint, Outlook, SharePoint and other Office applications without registration and free of charge

New Question

 

מ' שואל:

יש לי אקסל בעלת גליונות רבים מאוד הגיליון הראשון נקרא בשם "גיליון ראשון" והגיליון האחרון נקרא בשם "גיליון אחרון" ואחרי הגיליון האחרון הוספתי עכשיו גליון בשם סיכום.
בכל בגיליונות [חוץ משלוש הגיליונות] יש בעמודה A שמות ובעמודה H מספרים,
אני רוצה שבגיליון סיכום יהיה לי אפשרות בעמודה A לכתוב שמות המופיעים לפחות פעם אחת
באחד מכלל הגיליונות באקסל בעמודה A, ואוטומטית בעמודה B ליד השם שכתבתי
יסוכם סה"כ של כל המספרים המופיעים בעמודה H על אותו שם.

תשובה:

ניתן לבצע זאת באקסל על ידי שימוש בקוד VBA.

לדוגמא:

נגדיר בקובץ אקסל שני גליונות  "1" ו-"2".  בכל גיליון אקסל בעמודה A נגדיר שמות ובעמודה H נגדיר כמות.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

נפתח את עורך VBA ע"י לחיצה על Alt+F11 ואז נבחר ב-Insert -> Module ונדביק את הקוד הבא - 

Option Explicit

Public Sub UpdateSummary()

    Dim ws As Worksheet, lastSummaryRow As Long, lastDataRow As Long
    Dim i As Long, personName As String, total As Double

    With ThisWorkbook.Worksheets("סיכום")

        lastSummaryRow = .Cells(.Rows.Count, "A").End(xlUp).Row

        For i = 2 To lastSummaryRow

            personName = Trim(.Cells(i, "A").Value)
            total = 0

            If personName <> "" Then

                For Each ws In ThisWorkbook.Worksheets

                    Select Case ws.Name

                        Case "גיליון ראשון", "גיליון אחרון", "סיכום"
                            'do nothing 

                        Case Else

                            lastDataRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

                            If lastDataRow >= 2 Then
                                        total = total + Application.SumIf(   ws.Range("A2:A" & lastDataRow), personName,  ws.Range("H2:H" & lastDataRow))
                            End If

                    End Select

                Next ws

                .Cells(i, "B").Value = total

            Else
                .Cells(i, "B").ClearContents
            End If

        Next i

    End With

    MsgBox "הסיכום עודכן בהצלחה", vbInformation

End Sub

 

 

נוסיף גיליון "סיכום" שבו בעמודה A נגדיר שמות ובתא B1 נגדיר כותרת "כמות"

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
 
כדי שהמקרו יישמר יש לשמור את הקובץ בפורמט XLSM.
כדי לאפשר הפעלת קוד מקרו באקסל יש לבחור בקובץ -> אפשרויות -> מרכז יחסי אמון -> הגדרות מרכז יחסי אמון -> הגדרות מקרו -> סימון "הפוך כל פקודות מקרו לזמינות" ואישור.
 
בברכה,
צוות אניפיט