Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1924to1928
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Aufsummieren

Aufsummieren
28.03.2023 19:01:29
Ron

Hallo Excel-Profis,
wer kann helfen.
Ich möchte, dass mein Code nach dem öffnen einer bestimmten Tabelle ab Zeile 40 in Spalte A nach den Jahren sucht.
Im Anschluss soll in Spalte E geprüft werden, ob da 16 oder 19 steht. Steht da 19, sollen die Werte der Spalte F in die Textboxen1 bis 5
übertragen werden. Steht das 16 sollen die Werte in die Textbox 6 übertragen werden.
Nun möchte ich aber noch, dass wenn das gleiche Jahr in Spalte A mehrmals auftritt und in Spalte E 19 steht, dass die Werte aufsummiert in die
richtige Textbox übertragen wir. Wenn in Spalte E 16 steht, funktioniert es.
Weiterhin würde ich den Code gerne mehrfach ausführen, sodass der Inhalt der Textboxen aufsummiert wird.
Anbei meine Mustemappe

https://www.herber.de/bbs/user/158486.xlsm

Danke für die Hilfe

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aufsummieren
28.03.2023 19:29:34
Daniel
Hi
verwende ZählenWenns um jedes Jahr auszusummieren.

dim Summe19 as double
dim Summe16 as double
dim Zeilen as long

...
Zeilen = ws.Cells(rows.count, 1).end(xlup.row) - 39
with ws.Cells(40, 1).Resize(Zeilen, 6)
for i = 1 to 5
    yearLabel = Replace(Me.Controls("Label" & i).Caption, "Jahr ", "")
    Summe19 = Worksheetfunction.SumIfs(.Columns(6), .Columns(1), yearLabel, .Columns(5), 19)
    Summe16 = Summe16 + Worksheetfunction.SumIfs(.Columns(6), .Columns(1), yearLabel, .Columns(5), 16)
    with me.controls("Textbox" & i)
        if .Text = "" then 
              .Text = Cstr(Summe19)
        else
            .Text = CStr(CDbl(.Text) + Summe19)
         end if
    end with
Next
with Textbox6
   if .Text = "" then 
         .Text = Cstr(Summe19)
    else
        .Text = CStr(CDbl(.Text) + Summe19)
     end if
end with 
Gruß Daniel



Anzeige
AW: Aufsummieren
28.03.2023 20:00:18
Ron
Danke Daniel
Der Code ist ja komplett anders. Ich wüsste jetzt gar nicht, wo genau ich ihn einfügen müsste.
Gruß


AW: Aufsummieren
28.03.2023 21:01:35
Daniel
Ich empfehle immer: lesen, verstehen, selber schreiben.
Im Prinzip ersetzt das CounrIf/SummeWenns die Schleife über die Zeilen und die If-Abfragen.
Wen du den Code mehrfach ausführen willst, musst du das Ergebnis zum textboxinhalt hinzufügen.
Das If braucht man dabei, weil VBA ein leer nicht als 0 interpretiert.

Gruß Daniel


AW: Aufsummieren
29.03.2023 08:19:14
Ron
Hallo Daniel,
ich habe deinen Code eingearbeitet. Die Summe wird zwar gebildet aber immer mal 5. ???
Gruß

Private Sub CommandButton1_Click()

Dim filePath As String
Dim wb As Workbook
Dim ws As Worksheet
Dim i As Long
Dim j As Long
Dim yearLabel As String
Dim yearFound As Boolean
Dim yearValue As Integer
Dim sumValue As Double

Dim Summe19 As Double
Dim Summe16 As Double
Dim Zeilen As Long


'Öffnen des Dialogfensters zum Auswählen der Datei
With Application.fileDialog(msoFileDialogOpen)
    .Filters.Clear
    .Filters.Add "Excel Files", "*.xlsx; *.xlsm; *.xls"
    .AllowMultiSelect = False
    If .Show = True Then
        filePath = .SelectedItems(1)
    Else
        Exit Sub
    End If
End With

'Öffnen der ausgewählten Datei
Set wb = Workbooks.Open(filePath)
Set ws = wb.Sheets(1)

'Prüfen, ob in den Labels vierstellige Jahre stehen
For i = 1 To 5
    yearLabel = Replace(Me.Controls("Label" & i).Caption, "Jahr ", "")
    yearFound = False
    If Len(yearLabel) = 4 And IsNumeric(yearLabel) Then
        yearValue = CInt(yearLabel)

                   Zeilen = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row - 69

                    With ws.Cells(70, 1).Resize(Zeilen, 6)
                    For j = 1 To 5
                        yearLabel = Replace(Me.Controls("Label" & j).Caption, "Jahr ", "")
                        Summe19 = WorksheetFunction.SumIfs(.Columns(6), .Columns(1), yearLabel, .Columns(5), 19)
                        Summe16 = Summe16 + WorksheetFunction.SumIfs(.Columns(6), .Columns(1), yearLabel, .Columns(5), 16)
                        With Me.Controls("Textbox" & j)
                            If .Text = "" Then
                                  .Text = CStr(Summe19)
                            Else
                                .Text = CStr(CDbl(.Text) + Summe19)
                             End If
                        End With
                    Next
                    With TextBox6
                       If .Text = "" Then
                             .Text = CStr(Summe16)
                        Else
                            .Text = CStr(CDbl(.Text) + Summe16)
                         End If
                    End With
                  End With
  End If
Next i

'Beenden des Makros
wb.Close SaveChanges:=False
Set ws = Nothing
Set wb = Nothing

End Sub


Anzeige
AW: Aufsummieren
29.03.2023 09:54:12
Daniel
naja, du weist ihn ja an, dass er das 5x tun solll:

For j = 1 To 5

da reicht einmal, dh for j = 1 to 1 oder dann eben ganz weglassen.

das for i = 1 to 5 muss bleiben, weil das die Schleife über die verschiedenen Labels/Textboxen/Jahre ist, aber das for j = 1 to 5 war deine alte Schleife über die Zeilen, in den du jeden Wert einzeln ausgelesen und dann aufsummiert hast.
Die Funktion dieser Schleife übernimmt das SumIfs, daher kann diese Schleife weg.

beachte dass die Textbox6 erst gefüllt werden darf, wenn alle Jahre durchgelaufen sind, dh befüllen der Textbox 6 muss erfolgen, nachdem die Schleife über die Labels/Boxen/Jahre durchgelaufen ist.

Gruß Daniel


Anzeige
AW: Aufsummieren
29.03.2023 19:21:35
Ron
Hallo, du meinst bestimmt For i = 1 to 5 kann weg und die For j = 1 to 5 muss bleiben. Nur so funktioniert es.
Vielen Dank!


AW: Aufsummieren
29.03.2023 20:13:45
Ron
Hallo Daniel, der Code setzt doch voraus, dass die Label und Textboxen 1 bis 5 heißen.
Was ist, wenn die Textboxen z.B. 13 bis 17 oder die Label 4 bis 8 heißen?
Gruß


AW: Aufsummieren
29.03.2023 20:32:41
Daniel
naja, dann muss man halt alles entsprechend anpassen.
Schleifen müssen nicht mit 1 beginnen.
bei nur 5 kann man auch jede Kombi einzeln programmieren, ohne schleife, dann dürfen die Elemente auch frei benannt werden.
Man kann sich das Leben einfach machen, muss aber nicht.

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige