VBA Excel Summieren wenn...
Hallo Zusammen,
ich habe folgendes Problem. Ich habe in Excel eine zweispaltige Tabelle. Spalte 1 = Bezeichnung, Spalte 2 = nummerischer Wert.
Nun will ich alle Werte aus Spalte 2 summieren, bei denen in Spalte 1 die Bezeichnung "Windows" vorkommt.
Gibt es hier eine Funktion für? Wenn ja wie heißt diese?
Vielen Dank im Voraus!
2 Antworten
Das kann man auch mit der =WENN()-Funktion in Excel machen. Dann gibt es auch komplexere SUMMEIF-Funktionen. Alles da.
Aber auch VBA kann das: einfach eine FOR-NEXT-Schleife mit einer IF-Abfrage.
Function ZaehleWindows()
Ende = 200
Start = 1
WerteSumme = 0
For x = Start To Ende
If Cells(x, 1).Value = "Windows" Then WerteSumme = WerteSumme + Cells(x, 2)
' die Formel muss in eine Zeile, hier nur Zeilenumbruch, weil begrenze Zeilelnlänge
'ggf. mit ucase/lcase nehmen, um Groß-/Kleinschreibung zu ignorieren, dann entsprechend WINDOWS oder windows nehmen
Next
MsgBox (WerteSumme)
ZaehleWindows = WerteSumme
Exit Function 'ggf. überflüssig
End Function
Topp! Ich würde nur anstelle '...Value = "Windows"' die InStr-Funktion verwenden, damit Werte hinter 'Windows 2000' z. B. auch summiert werden.
Einfach den Tipp von Suboptimierer nehmen:
Sub ZaehleWindowsUndLinux()
Ende = 200
Start = 1
WerteSummeWindows = 0
WerteSummeLinux = 0
For x = Start To Ende
If InStr(1, UCase(Cells(x, 1).Text), "WINDOWS") Then WerteSummeWindows = WerteSummeWindows + Cells(x, 2)
If InStr(1, UCase(Cells(x, 1).Text), "LINUX") Then WerteSummeLinux = WerteSummeLinux + Cells(x, 2)
' die Formel muss in eine Zeile, hier nur Zeilenumbruch, weil begrenze Zeilelnlänge
Next
OkWindows = MsgBox(WerteSummeWindows, vbOKOnly, "Windows")
OkLinux = MsgBox(WerteSummeLinux, vbOKOnly, "Linux")
End Sub
Perfekt Danke es funktioniert!
Kann ich die Werte aus der Message Box nun auch in eine seperate Excel Datei schreiben lassen?
Range ("A1") = WerteSummeWindows
Range("B1") = WerteSummeLinux
wäre dies der richtige Ansatz?
Doch wie bekomm ich das nun in eine andere Datei?
Wenn Deine Programmierkenntnisse, wie Du schreibst, beschränkt sind, warum muss es dann VBA sein?
Das lässt sich auch mit einer ganz einfachen Funktion lösen:
=SUMMEWENN(A1:A100;"*Windows*";B1:B100)
Wäre das was für Dich?
An sich eine gute Idee, danke ;)
Wollte jedoch ein Script erstellen.
Auch kein Problem, dann schreibe diese Formel einfach in Dein Script:
Sub SummeWenn()
Dim ZielZelle As Range
Set ZielZelle = Range("E1") 'Hier Dein Ziel angeben
ZielZelle.Value = Application.WorksheetFunction.SumIf _
(Range("A1:A100"), "*Windows*", Range("B1:B100"))
End Sub
Vielen Dank erst einmal!
Leider sind meine Programmier Erfahrungen und Kenntnise sehr beschränkt.
Bei mir erscheint nun in der Message Box leider immer der Wert "0".
Ich versuche mein Problem noch einmal etwas genauer darzustellen.
Ich habe ein Excel Sheet mit 2 Spalten und 22 Zeilen. In Spalte 1 stehen Bezeichnungen für unterschiedliche Betriebssysteme (z.B. "Windows98", "WindowsXP", "Windows...", "Linux...".
In Spalte 2 steht ein nummerischer Wert.
Nun ist es mein Ziel das von allen Zeilen wo die Bezeichnung "Windows" vorkommt der nummerische Wert addiert wird.
Ebenso soll das für alle Zeilen geschehen wo die Bezeichnung "Linux" vorkommt.
Vielen Dank!