Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Summe aus Listboxspalte

Summe aus Listboxspalte
12.08.2013 14:00:55
Uwe
Hallo zusammen,
ich möchte die Summe einzelner Spalten aus der Listbox in Labels in einer Userform anzeigen.
Die Listbox hat 6 Spalten. Die Summe drei dieser Spalten sollen in den Labels 1,2 und 3 angezeigt werden. Für Label1 funktioniert das auch, jedoch die Label2 und 3 geben mir zwar eine Zahl aus aber das ist nicht die Summe der Spalte die ich haben möchte.
Hier mal der Code:

Private Sub ComboBox1_Change()
Dim objList As Object, arr, i As Long, j As Integer, arrTmp(1 To 1, 1 To 6), arrList()
Dim wert As Double
Dim wert1 As Double
Dim wert2 As Double
Set objList = CreateObject("Scripting.Dictionary")
With Sheets("Übersicht")
arr = .Range("A8:H1000")
End With
For i = 1 To UBound(arr)
If MonthName(Month(arr(i, 1))) = ComboBox1 Then
For j = 1 To 6
arrTmp(1, j) = arr(i, j)
Next
objList(i) = arrTmp
End If
Next
If objList.Count = 0 Then
ListBox1.Clear
Exit Sub
End If
arr = objList.items
arr = WorksheetFunction.Transpose(arr)
arr = WorksheetFunction.Transpose(arr)
ReDim arrList(1 To objList.Count, 1 To 6)
If objList.Count > 1 Then
For i = 1 To UBound(arr)
For j = 1 To 6
arrList(i, j) = arr(i, j)
Next
Next
Else
For i = 1 To 6
arrList(1, i) = arr(i)
Next
End If
ListBox1.ColumnCount = 6
ListBox1.List = arrList
'Ab hier soll die Summe der einzelnen Spalten
'in Listbox1 berechnet und in dem jeweiligen Label ausgegeben werden
For i = 0 To Me.ListBox1.ListCount - 1
wert = wert + Me.ListBox1.List(i, 3)  'Summe Betrag (Listbox1 Spalte 4)
wert1 = wert + Me.ListBox1.List(i, 2) 'Summe gefahrene km (Listbox1 Spalte 3)
wert2 = wert + Me.ListBox1.List(i, 4) 'Summe getankte Liter (Listbox1 Spalte 5)
Next i
Label1.Caption = wert          'gibt richtge Summe aus
Label2.Caption = wert1         'keine Fehlermeldung aber falsche Summe
Label3.Caption = wert2         'keine Fehlermeldung aber falsche Summe
Label4.Caption = Range("H3").Value    'gibt richtigen Wert aus
End Sub

Wo zum Geier liegt der Fehler?
Gruß Uwe

Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Habs entdeckt
12.08.2013 14:10:41
Uwe
Hier lag der Fehler
For i = 0 To Me.ListBox1.ListCount - 1
wert = wert + Me.ListBox1.List(i, 3) 'Summe Betrag (Listbox1 Spalte 4)
wert1 = wert1 + Me.ListBox1.List(i, 2) 'Summe gefahrene km (Listbox1 Spalte 3)
wert2 = wert2 + Me.ListBox1.List(i, 4) 'Summe getankte Liter (Listbox1 Spalte 5)
VG Uwe

Anzeige
Habs entdeckt
12.08.2013 14:10:57
Uwe
Hier lag der Fehler
For i = 0 To Me.ListBox1.ListCount - 1
wert = wert + Me.ListBox1.List(i, 3) 'Summe Betrag (Listbox1 Spalte 4)
wert1 = wert1 + Me.ListBox1.List(i, 2) 'Summe gefahrene km (Listbox1 Spalte 3)
wert2 = wert2 + Me.ListBox1.List(i, 4) 'Summe getankte Liter (Listbox1 Spalte 5)
VG Uwe

Anzeige
Doch noch ein Fehler
12.08.2013 14:49:41
Uwe
Da war ich wohl zu optimistisch... ;-)
Meine UF mit der LB funtioniert soweit so wie ich das möchte. Außer im Monat Dezember, da bekomme ich dieser Zeile
wert1 = wert1 + Me.ListBox1.List(i, 2) 'Summe gefahrene km (Listbox1 Spalte 3)
den Debugger. "Laufzeitfehler13: Typen unverträglich".
Aber warum nur im Dezember? Egal ob Daten in diesem Monat vorhanden sind oder nicht.
Kurz zur Funktion:
Ich habe in der UF eine CB über die der Monat ausgewählt wird und dann in der LB die einzelnen Tankvorgänge des betreffenden Monats angezeigt werden. Zusätzlich werden einzelne Spalten der LB addiert und die Summe in Labels ausgegeben.
Der komplette Code steht im ersten Beitrag.
Weiß da jemand Rat?
Gruß Uwe

Anzeige
AW: Doch noch ein Fehler
12.08.2013 18:55:02
Bernd
Hallo Uwe,
du must deine Frage als offen deklarieren, ein Häkchen direkt neben der Passwortzeile.
Gruß
Bernd

AW: Doch noch ein Fehler
12.08.2013 23:35:16
Uwe
@Bernd: das wusste ich nicht. Bin erst seit kurzem im im Forum.
@ Matthias L: Ich dachte ich muß einen neuen Thread eröffnen um oben zu stehen und Antworten zu bekommen. Sorry bin neu hier.
Problem ist nun, das der Dezember die beschriebene Fehlermeldung bringt. Alles andere funktioniert bestens. Mit den Labels gings dann doch besser als mit den LB. Aufgrund meiner Unerfahrenheit wusste ich das vorher nicht.
Weiterhin, wie kann ich das Jahr noch auswählen? Ist dafür eine zweite CB nötig oder kann ich das mit der einen ebenfalls realisieren?
VG Uwe

Anzeige
AW: Summe aus Listboxspalte
12.08.2013 21:03:57
Matthias
Hallo
Warum bleibst Du nicht im alten Beitrag?
https://www.herber.de/forum/archiv/1324to1328/t1326421.htm#1326421
Benutzt Du nun doch Labels statt der ListboxObjekte
Dann hättest Du auch mal ne Rückmeldung geben können!
Gruß Matthias

Anzeige
AW: Summe aus Listboxspalte
12.08.2013 23:40:21
Uwe
Hallo Matthias,
Ich dachte ich muß einen neuen Thread eröffnen um oben zu stehen und Antworten zu bekommen. Sorry bin neu hier.
Problem ist nun, das der Dezember die beschriebene Fehlermeldung bringt. Alles andere funktioniert bestens. Mit den Labels gings dann doch besser als mit den LB. Aufgrund meiner Unerfahrenheit wusste ich das vorher nicht.
Weiterhin, wie kann ich das Jahr noch auswählen? Ist dafür eine zweite CB nötig oder kann ich das mit der einen ebenfalls realisieren?
VG Uwe

Anzeige
AW: Summe aus Listboxspalte
13.08.2013 06:39:23
robert
Hi,
hast Du die Summen nicht in der Tabelle berechnet?
Wenn nicht, dann tu das ;-)
Dann kannst Du die Werte aus den Zellen in die Labels übernehmen.
Gruß
robert

Nachfrage...
13.08.2013 08:37:35
robert
Hi,
hast Du Deine Datei umgebaut ?
Lt.der Datei im 1.Beitrag kommen doch falsche Summen raus-oder?

Anzeige
AW: Nachfrage...
13.08.2013 14:11:43
Uwe
Hi Robert,
ja hab umgebaut und berechne die Summen der Spalten in der LB und gebe sie in dem jeweiligen label aus. Funktioniert auch bestens. Problem ist eben das bei der Auswahl Dezember in der CB ein Laufzeitfehler kommt (Typen unverträglich). Hier nochmal der Code wie er jetzt ist.
Private Sub ComboBox1_Change()
Dim objList As Object, arr, i As Long, j As Integer, arrTmp(1 To 1, 1 To 6), arrList()
Dim wert As Double
Dim wert1 As Double
Dim wert2 As Double
Dim wert3 As Single
Set objList = CreateObject("Scripting.Dictionary")
With Sheets("Übersicht")
arr = .Range("A8:h1000")
End With
For i = 1 To UBound(arr)
If MonthName(Month(arr(i, 1))) = ComboBox1 Then
For j = 1 To 6
arrTmp(1, j) = arr(i, j)
Next
objList(i) = arrTmp
End If
Next
If objList.Count = 0 Then
ListBox1.Clear
Exit Sub
End If
arr = objList.items
arr = WorksheetFunction.Transpose(arr)
arr = WorksheetFunction.Transpose(arr)
ReDim arrList(1 To objList.Count, 1 To 6)
If objList.Count > 1 Then
For i = 1 To UBound(arr)
For j = 1 To 6
arrList(i, j) = arr(i, j)
Next
Next
Else
For i = 1 To 8
arrList(1, i) = arr(i)
Next
End If
ListBox1.ColumnCount = 8
ListBox1.List = arrList
'Ab wird die Summe der einzelnen Spalten
'in Listbox1 berechnet und in dem jeweiligen Label ausgegeben werden
For i = 0 To Me.ListBox1.ListCount - 1
wert = wert + Me.ListBox1.List(i, 3)          'Summe Betrag (Listbox1 Spalte 4)
wert1 = wert1 + Me.ListBox1.List(i, 2)        'Summe gefahrene km (Listbox1 Spalte 3)
wert2 = wert2 + Me.ListBox1.List(i, 4)        'Summe getankte Liter (Listbox1 Spalte 5)
wert3 = Range("H3")
Next i
Label1.Caption = Format(Round(wert, 2), "#,##0.00") & " Euro"
Label2.Caption = Format(Round(wert1, 2), "0") & " km"
Label3.Caption = Format(Round(wert2, 2), "#,##0.00") & " l"
Label4.Caption = Format(Round(Worksheets("Übersicht").Range("H3"), 2), "#,##0.00") & _
" l/100km"
End Sub
Diese Zeile wird vom Debugger markiert:
wert1 = wert1 + Me.ListBox1.List(i, 2) 'Summe gefahrene km (Listbox1 Spalte 3)
Alle anderen Monate funktionieren bestens. Keinen Ahnung warum das so ist.
Kann ich eigentlich auch das Jahr zum jeweiligen Monat mit einbauen in die CB oder brauch ich dann noch eine zweite CB? Das wäre praktisch, damit im nächsten Jahr nicht der Vorjahresmonat mit angezeigt wird.
Für eine Lösung bzw. einen Ansatz dazu wäre ich sehr dankbar.
PS:Bin jetzt paar Tage im Urlaub. Melde mich dann wenn ich zurück bin.
VG Uwe

Anzeige
und die Datei willst Du nicht schicken? owT...
13.08.2013 17:01:29
robert

AW: und die Datei willst Du nicht schicken? owT...
13.08.2013 21:25:29
Uwe
https://www.herber.de/bbs/user/86839.xlsm
Doch klar kein Problem.
Was bedeutet eigentlich owT?
VG und jetzt ist Urlaub für mich :-)
Uwe

Fertig-Dezember geht !
14.08.2013 08:42:44
robert
https://www.herber.de/bbs/user/86840.xlsm
Hi,
Bereich bis A1000 wirkt sich im Dezember aus, daher letzte Zeile in Spalte A ermitteln-schau ins Makro.
Gruß
robert

Anzeige
AW: Fertig-Dezember geht !
14.08.2013 11:16:48
Uwe
Riesigen Dank Robert für deine Hilfe.
VG Uwe

Gerne, schönen Urlaub-owT(ohneweiterenText)...
14.08.2013 11:38:17
robert
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Summe aus Listboxspalte berechnen und anzeigen


Schritt-für-Schritt-Anleitung

Um die Summe von bestimmten Spalten in einer Listbox anzuzeigen, kannst du die folgende Schritt-für-Schritt-Anleitung befolgen. In diesem Beispiel gehen wir davon aus, dass du eine Userform mit einer Listbox und mehreren Labels hast.

  1. Vorbereitung der Userform:

    • Füge eine Listbox (ListBox1) und drei Labels (Label1, Label2, Label3) zu deiner Userform hinzu.
    • Stelle sicher, dass die Listbox auf 6 Spalten eingestellt ist.
  2. Code für die Listbox und Summenberechnung:

    • Füge den folgenden VBA-Code in das Codefenster deiner Userform ein:
Private Sub ComboBox1_Change()
    Dim objList As Object, arr, i As Long, j As Integer, arrTmp(1 To 1, 1 To 6), arrList()
    Dim wert As Double
    Dim wert1 As Double
    Dim wert2 As Double
    Set objList = CreateObject("Scripting.Dictionary")
    With Sheets("Übersicht")
        arr = .Range("A8:H1000")
    End With
    For i = 1 To UBound(arr)
        If MonthName(Month(arr(i, 1))) = ComboBox1 Then
            For j = 1 To 6
                arrTmp(1, j) = arr(i, j)
            Next
            objList(i) = arrTmp
        End If
    Next
    If objList.Count = 0 Then
        ListBox1.Clear
        Exit Sub
    End If
    arr = objList.items
    arr = WorksheetFunction.Transpose(arr)
    arr = WorksheetFunction.Transpose(arr)
    ReDim arrList(1 To objList.Count, 1 To 6)
    For i = 1 To UBound(arr)
        For j = 1 To 6
            arrList(i, j) = arr(i, j)
        Next
    Next
    ListBox1.ColumnCount = 6
    ListBox1.List = arrList

    ' Summe der einzelnen Spalten berechnen
    For i = 0 To Me.ListBox1.ListCount - 1
        wert = wert + Me.ListBox1.List(i, 3)  ' Summe Betrag (Spalte 4)
        wert1 = wert1 + Me.ListBox1.List(i, 2) ' Summe gefahrene km (Spalte 3)
        wert2 = wert2 + Me.ListBox1.List(i, 4) ' Summe getankte Liter (Spalte 5)
    Next i
    Label1.Caption = Format(Round(wert, 2), "#,##0.00") & " Euro"
    Label2.Caption = Format(Round(wert1, 0), "0") & " km"
    Label3.Caption = Format(Round(wert2, 2), "#,##0.00") & " l"
End Sub
  1. Testen der Funktionalität:
    • Führe die Userform aus und wähle einen Monat aus der ComboBox (ComboBox1) aus. Die Summen sollten in den Labels korrekt angezeigt werden.

Häufige Fehler und Lösungen

  • Laufzeitfehler 13: Typen unverträglich:

    • Dieser Fehler tritt häufig auf, wenn die Daten in der Listbox nicht den erwarteten Typ haben (z.B. Text anstelle von Zahlen). Stelle sicher, dass die Spalten in der Excel-Tabelle die richtigen Datentypen haben.
  • Falsche Summen:

    • Wenn die Summe nicht korrekt angezeigt wird, überprüfe, ob die richtige Spalte in der Listbox angesprochen wird. Achte darauf, dass du die richtigen Indizes verwendest (beginnend bei 0).

Alternative Methoden

Anstatt die Summe in der Userform zu berechnen, kannst du die Summen auch direkt in der Excel-Tabelle berechnen und die Werte in die Labels übernehmen. Verwende dazu die Formel =SUMME(A1:A10) in der Zelle, und greife dann mit Range("Zelle").Value auf das Ergebnis zu.


Praktische Beispiele

Nehmen wir an, dass du die Summe der gefahrenen Kilometer in Label2 anzeigen möchtest. Du kannst den Abschnitt, der die Summe berechnet, anpassen:

Label2.Caption = Format(Round(wert1, 0), "0") & " km"

Das zeigt die Summe der gefahrenen Kilometer in einem leserlichen Format an.


Tipps für Profis

  • Verwendung von Formatierung: Nutze die Formatierungsfunktionen in VBA, um Zahlen ansprechend darzustellen. Beispielsweise kannst du für Währungsbeträge Format(Round(wert, 2), "#,##0.00") verwenden.

  • Fehlerbehandlung einbauen: Verwende On Error Resume Next und On Error GoTo 0, um Fehler abzufangen und zu behandeln, damit dein Programm nicht abstürzt.


FAQ: Häufige Fragen

1. Wie kann ich die Summe für einen bestimmten Monat berechnen? Indem du eine ComboBox verwendest, in der die Monate aufgelistet sind, und basierend auf der Auswahl die entsprechenden Daten in die Listbox lädst.

2. Kann ich auch das Jahr auswählen? Ja, du kannst eine zweite ComboBox hinzufügen, um das Jahr auszuwählen. Das erfordert jedoch eine Anpassung des Codes, um die Daten entsprechend zu filtern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige