VBA Excel Summieren wenn...

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


Suboptimierer  19.03.2015, 10:22

Topp! Ich würde nur anstelle '...Value = "Windows"' die InStr-Funktion verwenden, damit Werte hinter 'Windows 2000' z. B. auch summiert werden.

mpetric23 
Beitragsersteller
 19.03.2015, 10:53

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!

nobytree2  19.03.2015, 11:11
@mpetric23

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

mpetric23 
Beitragsersteller
 19.03.2015, 12:10
@nobytree2

Perfekt Danke es funktioniert!

Kann ich die Werte aus der Message Box nun auch in eine seperate Excel Datei schreiben lassen?

mpetric23 
Beitragsersteller
 19.03.2015, 12:27
@mpetric23

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? 


Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)

mpetric23 
Beitragsersteller
 19.03.2015, 12:10

An sich eine gute Idee, danke ;)

Wollte jedoch ein Script erstellen.

Oubyi, UserMod Light  19.03.2015, 23:46
@mpetric23

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