Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: vba summewenn abhängig von Spalten

vba summewenn abhängig von Spalten
Spalten
Hallo Allemiteinander
Stehe auf dem Schlauch. In den Spalten G1: H45 stehen Zahlen oder nichts, diese moechte ich mit VBA summieren wenn in den Spalten M bis Q der Zeile der Wert groesser 0(hier gelb) ist. Bsp. Rot soll nicht mitgezaehlt werden.
Die Eingaben erfolgen ueber UserForm zeilenweise. Ausgabe(hier 16) in MsgBox. Wie stelle ich das am geschicktesten an.
Bin fuer jeden Tip dankbar.
gruss hary
Tabelle1
 GHIJKLMNOPQ
14          23       
2  4              0 
32                  23
42                  12
52              33   
6  6          45     
7                     
8                     
9  waere                 
10  16                 

Tabellendarstellung in Foren Version 5.30


Anzeige
AW: vba summewenn abhängig von Spalten
22.02.2011 13:55:06
Spalten
Hallo harry,
Gibt es in M bis Q nur einen Wert?
Ich würde das über Formel lösen.

AW: vba summewenn abhängig von Spalten
22.02.2011 14:26:59
Spalten
Hallo Hajo
Ja, wenn dann steht entweder in Spalte G oder H eine Zahl und nur in einer der Spalten M bis Q derselben Zeile eine Zahl (Null oder groesser).
Zum besseren verstaendniss:
In Spalten G und H kommt die Achsenzahl von Waggons rein je nach dem ob der Waggon beladen oder leer ist. Diese Achsen(leer und beladen) sollen gezaehlt werden, aber nur wenn in M bis Q ein Wert groesser Null steht.
Also alle leeren und beladenen Achsen zaehlen bei denen ein Wert groesser Null in M bis Q ist.
Von 45 Zeilen sind aber nicht immer alle ausgefuellt.
gruss hary
Anzeige
AW: vba summewenn abhängig von Spalten
22.02.2011 14:35:14
Spalten
Hallo Hary,
per Formel und Hilfsspalte.
Tabelle2
 GHIJKLMNOPQ
14        2323       
2  4      0      0 
32        23        23
42        12        12
52        33    33   
6  6      45  45     
7          0         
8          0         
9  waere      0         
10  1616    0         

verwendete Formeln
Zelle Formel Bereich
L1 =SUMME(M1:Q1) 
L2 =SUMME(M2:Q2) 
L3 =SUMME(M3:Q3) 
L4 =SUMME(M4:Q4) 
L5 =SUMME(M5:Q5) 
L6 =SUMME(M6:Q6) 
L7 =SUMME(M7:Q7) 
L8 =SUMME(M8:Q8) 
L9 =SUMME(M9:Q9) 
I10 =SUMMEWENN(L1:L9;">0";G1:G9)+SUMMEWENN(L1:L9;">0";H1:H9) 
L10 =SUMME(M10:Q10) 

Tabellendarstellung in Foren Version 5.38


Gruß Hajo
Anzeige
AW: vba summewenn abhängig von Spalten
22.02.2011 15:22:33
Spalten
Danke Hajo
versuche es aber trotzdem noch mit Vba. Alleine des lernens Willen.
gruss hary
AW: vba summewenn abhängig von Spalten
22.02.2011 16:03:05
Spalten
so vllt.
Sub summieren()
Dim i, s As Long
For i = 1 To 45
If Cells(i, 13) > 0 _
Or Cells(i, 14) > 0 _
Or Cells(i, 15) > 0 _
Or Cells(i, 16) > 0 _
Or Cells(i, 17) > 0 Then
s = s + Cells(i, 7) + Cells(i, 8)
End If
Next
End Sub

Gruß
Jochen
Anzeige
@ Jochen
22.02.2011 17:10:06
hary
hallo Jochen
auch Dir Danke. habe mich fuer marc's Code entschieden, nachdem ich meinen fehler behoben habe.
Jetzt wo ich alle Threads gelesen habe, ging der Knoten auf.
gruss hary
AW: @ Jochen
22.02.2011 21:00:33
JoWE
oder so:
Sub summieren()
Dim i, s As Long
Dim sh As Worksheet
Set sh = ActiveWorkbook.Sheets(1)
For i = 1 To 45
If sh.Range(Cells(i, 13), Cells(i, 17)) _
.Find(0, Lookat:=xlWhole) Is Nothing Then
s = s + WorksheetFunction.Sum(sh.Cells(i, 7), sh.Cells(i, 8))
End If
Next
MsgBox s
End Sub

Anzeige
AW: @ Jochen
23.02.2011 09:06:09
hary
Moin Jochen
nochmal danke. Jetzt wo ich weiss wo der Fehler lag stehen alle Tueren auf. Auch meine eigenen ersten Versuche fruchten.
Fehlerbeschreibung:
Userform mit 20 Textboxen. Ubertragung deren Inhalte(Zahlen oder Buchstaben) mit einer Schleife.
Die 5 Textboxen fuer M bis Q sind auch darin. Da aber nur eine, eine Zahl enthielt und die anderen 4 leer sind kommt der Eintrag der leeren Textboxen als Leerzeichen in die betr. Zellen.
Habe es so geloest:
Zielzelle = Trim(TextBox)
und schon lief es.
gruss hary
Anzeige
Sicher nicht die eleganteste Lösung, aber
22.02.2011 14:13:58
Marc
...die lösung stimmt!
Gruß,Marc
Sub test()
summe = 0
For i = 1 To 45
Set rng = Range("M" & i & ":Q" & i)
For Each nm In rng
If nm.Value > 0 Then
Debug.Print WorksheetFunction.Sum(Cells(i, 7), Cells(i, 8))
summe = summe + WorksheetFunction.Sum(Cells(i, 7), Cells(i, 8))
Exit For
End If
Next nm
Next i
MsgBox summe
End Sub

Anzeige
AW: Sicher nicht die eleganteste Lösung, aber
22.02.2011 15:26:03
hary
Hallo Marc
Danke, liefert aber das falsche Ergebniss. Liegt wahrscheinlich an mir, brauche wohl mal 'ne Pause.
hier mal eine Bsp. Tabelle. Dein Makro ist eingebaut.
https://www.herber.de/bbs/user/73678.xls
gruss hary
zurueck, Fehler gefunden
22.02.2011 15:50:39
hary
Hallo Marc und evtl. Mitleser
hab den Fehler gefunden. Fehler lag im Uebertragungscode. Hatte dort, statt nix zum uebertragen, ein leerzeichen reingebaut.
mach jetzt doch Pause ;-)
gruss hary
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

VBA Summewenn abhängig von Spalten


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf „VBAProject (DeineDatei.xlsx)“ > „Einfügen“ > „Modul“.

  3. Kopiere den VBA-Code: Verwende den folgenden Code, um die Summe abhängig von den Werten in den Spalten G und H sowie den Bedingungen in den Spalten M bis Q zu berechnen:

    Sub summieren()
       Dim i As Long, s As Long
       For i = 1 To 45
           If Cells(i, 13) > 0 Or Cells(i, 14) > 0 Or Cells(i, 15) > 0 Or Cells(i, 16) > 0 Or Cells(i, 17) > 0 Then
               s = s + Cells(i, 7).Value + Cells(i, 8).Value
           End If
       Next
       MsgBox s
    End Sub
  4. Führe das Makro aus: Drücke F5, um das Makro auszuführen und die Summe in einer MsgBox anzuzeigen.


Häufige Fehler und Lösungen

  • Fehler: MsgBox zeigt 0 an

    • Lösung: Überprüfe, ob die Werte in den Spalten M bis Q tatsächlich größer als 0 sind. Das Makro zählt nur die Zeilen, in denen dies der Fall ist.
  • Fehler: Die Ausgabe ist nicht korrekt

    • Lösung: Achte darauf, dass in den Zellen der Spalten G und H tatsächlich Zahlen stehen und keine Leerzeichen oder Text.

Alternative Methoden

Du kannst auch die SUMMEWENN-Funktion in Excel verwenden, um eine ähnliche Berechnung durchzuführen, ohne VBA zu nutzen. Zum Beispiel:

=SUMMEWENN(M1:Q1;">0";G1:H1)

Diese Formel summiert die Werte in den Zellen G1 und H1, wenn eine der Zellen in M1 bis Q1 größer als 0 ist.


Praktische Beispiele

Hier ist ein einfaches Beispiel zur Veranschaulichung:

Angenommen, du hast folgende Werte in Excel:

G H M N O P Q
4 0 1 0 0 0 2
0 4 0 0 0 0 0
2 0 0 0 0 0 3

Beim Ausführen des summieren-Makros wird die MsgBox den Wert 6 anzeigen, da die Zeile 1 und 3 Werte größer als 0 in M bis Q haben.


Tipps für Profis

  • Verwende Option Explicit: Setze am Anfang deines Moduls Option Explicit, um sicherzustellen, dass alle Variablen deklariert werden. Dies hilft, Fehler zu vermeiden.
  • Testen mit Debugging: Füge Debug.Print-Anweisungen hinzu, um während der Ausführung von Makros zu sehen, welche Werte verarbeitet werden.
  • Verwende benannte Bereiche: Wenn du oft mit den gleichen Bereichen arbeitest, nutze benannte Bereiche in Excel, um deine Formeln und VBA-Code übersichtlicher zu gestalten.

FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um eine andere Anzahl von Zeilen zu verarbeiten?
Du kannst die Zahl 45 in der For i = 1 To 45-Schleife anpassen, um die gewünschte Anzahl von Zeilen zu verarbeiten.

2. Kann ich die SUMMEWENN-Funktion auch in VBA verwenden?
Ja, du kannst WorksheetFunction.SumIf oder WorksheetFunction.SumIfs verwenden, um ähnliche Summierungen in VBA durchzuführen.

3. Was mache ich, wenn ich mehrere Bedingungen überprüfen möchte?
Verwende die SUMMEWENNS-Funktion in Excel oder erweitere deinen VBA-Code, um die zusätzlichen Bedingungen zu berücksichtigen.

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