Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1888to1892
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

VBA SummeWenn

VBA SummeWenn
30.06.2022 11:44:55
Thomas
Hallo,
ich würde gerne dynamisch eine SummeWenn in VBA nutzen, im Anhang eine Beispiel Tabelle, die aber immer unterschiedlich viele Zeilen haben kann.
Unten drunter (gelb markiert) sollen dann immer die Summen der jeweiligen Spalte stehen, das wenn bezieht sich immer auf einen String.
Wie kann ich das in VBA abbilden?
Danke
https://www.herber.de/bbs/user/153893.xlsm

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

Betreff
Datum
Anwender
Anzeige
AW: VBA SummeWenn
30.06.2022 12:57:52
UweD
Hallo
ich würde eine Kombi aus Formel und VBA nehmen

=SUMMEWENN($A$4:$A$14;$C17;D$4:D$14)
wird für dein Beispiel in den Bereich D17:G19 geschrieben und anschliessend in Werte umgewandelt

    Dim iR As Integer
Dim iC As Integer
Dim iLC As Integer
Dim iLR As Integer
Dim iZ1 As Integer, iS1 As Integer, iZE As Integer, iFr
iZ1 = 4 'erste Zeile mit Daten
iS1 = 4 'erste Spalte mit Daten
iFr = 2 'Anzahl freie Zeilen bis Summenbereich
iLR = Cells(Rows.Count, 1).End(xlUp).Row
iLC = Cells(4, Columns.Count).End(xlToLeft).Column
iZE = iLR - 2 'Start Summenbereich
With Cells(iZE, iS1).Resize(3, iLC - iS1 + 1)
'Zählenwenn setzte
.FormulaR1C1 = "=SUMIF(R" & iZ1 & "C1:R" & iZE - iFr - 1 & "C1,RC3,R" & iZ1 & "C:R" & iZE - iFr - 1 & "C)"
'Formel in Wert
.Value = .Value
End With

Anzeige
AW: VBA SummeWenn
01.07.2022 08:45:21
Thomas
Hall Uwe,
der Code funktioniert in der Beispieldatei perfekt, ich bekomme ihn nur nicht in meine original Datei, dürfte daran liegen das ich hier

.FormulaR1C1 = "=SUMIF(R" & iZ1 & "C1:R" & iZE - iFr - 1 & "C1,RC3,R" & iZ1 & "C:R" & iZE - iFr - 1 & "C)"
nicht so ganz durch blicke.
Anbei mal ein screenshot von der original Datei, am beispiel von Spalte D, die geht von D4 bis D538, die Summierung soll jetzt in D545 starten und in D547 (gelb markiert) enden, das zu suchende Kriterium steht in "A546" und im Bereich "B4-B438 (im Beispiel in B538) und das ganze soll dann von Spalte 4 bis 29 und Zeile 545-547 laufen.
Userbild
Danke für die Hilfe
MFG
Anzeige
AW: VBA SummeWenn
01.07.2022 08:59:41
Herbert_Grom
Hallo Thomas,
das dürfte m. E. daran liegen, dass deine Beispieldatei im Layout nicht der Originaldatei entspricht, denn ansonsten funzt Uwe's Code perfekt. Also, wenn du willst, dass wir dir helfen, dann lade deine Originaldatei hoch und ersetze sensible Daten mit Dummy's.
Servus
AW: VBA SummeWenn
01.07.2022 09:22:42
UweD
Hallo
Das liegt daran, dass vorher nur 2 'freie' Zeilen zwischen letztem Datensatz und Beginn Summenbereich waren
Hier sind es jetzt 6
Das kannst du aber hier selbst einstellen.

 iFr = 2 'Anzahl freie Zeilen bis Summenbereich
Was mit aber auffällt:
Hier ist Spalte C im unteren Bereich leer. Wenn das immer so ist, kann ich das Makro unschreiben und die letzte Zeile aus C und die letzte Zeile aus A
für die Abgrenzung verwenden.
Ist das so?
LG UweD
Anzeige
noch was
01.07.2022 09:35:43
UweD
Hallo nochmal
da des Suchtext jetzt in B anstelle C steht, muss hier auch geändert werden
aus Spalte 3 wird 2
.FormulaR1C1 = "=SUMIF(R" & iZ1 & "C1:R" & iZE - iFr - 1 & "C1,RC2,R" & iZ1 & "C:R" & iZE - iFr - 1 & "C)"
LG UweD
AW: noch was
01.07.2022 12:12:01
Thomas
Hi, danke nochmal für die Hilfe, aber die Formel überfordert mich leider etwas, ich hab jetzt nochmal eine Datei gebaut die den gleichen aufbau hat wie die original.
https://www.herber.de/bbs/user/153908.xlsm
MFG
Nachfrage
01.07.2022 13:12:20
UweD
Hallo nochmal
es ist noch nicht klar, wo der zu suchende Text steht.
Die Formel in z.B. D21
- soll den Text, der in B21 steht suchen oder aus B22? oder aus C21 oder C22?
- dann die Formel aus D22
- soll die sich dann auf B22 beziehen ....
- Soll den Text finden in B4: B14 oder in C4:C14?
LG
Anzeige
AW: Nachfrage
01.07.2022 13:28:43
Thomas
Hi,
sorry ich tu mir mit dem erklären wie es funktionieren soll glaub ich etwas schwer, hab grad auch nochmal nachgedacht, vielleicht ist SummeWenn auch garnicht richtig...
In Zeile D21 soll die Summe stehen zu dem zu Suchenden Kriterium aus B22, der Wert aus B22 steht im Suchbereich Spalte B, also in dem Beispiel in B4-B14 (in den gelb markierten Feldern) Wenn dann der Wert gefunden wurde, müsste in D21 die Summe aus D4,D8 und D12 stehen, In D22 dann D5,D9,D13 usw. und dann natürlich für jede Spalte.
Also in dem Beispiel müsste in D21 wenn man davon ausgeht das sowohl in B6,B10,B14 der zu suchende Wert stehen würde, als Ergebnis 377 stehen (D4+D8+D160)
In D22 367 als Summe (D5+D9+D13)
Danke
MFG
Anzeige
AW: noch was
01.07.2022 13:21:17
UweD
So?
 ABCDEFG
1   Text
2   01020304
3   JanFebMrzApr
4 Umsatz InlandText140160140140
5Anderer TextUmsatz ExportAnderer Text140200140140
6 Umsatz SonstigeNoch anderer Text0000
7       
8 Umsatz InlandText77777777
9Anderer TextUmsatz ExportAnderer Text77607777
10 Umsatz SonstigeNoch anderer Text0000
11       
12 Umsatz InlandText16090160160
13Anderer TextUmsatz ExportAnderer Text150150150150
14 Umsatz SonstigeNoch anderer Text-10-10-10-10
15       
16       
17 SummeTextSonst wasSonst wasSonst wasSonst was
18 SummeAnderer TextSonst wasSonst wasSonst wasSonst was
19 SummeNoch anderer TextSonst wasSonst wasSonst wasSonst was
20       
21 Umsatz InlandText377327377377
22 Umsatz ExportAnderer Text367410367367
23 Umsatz SonstigeNoch anderer Text-10-10-10-10

ZelleFormel
D21=SUMMEWENN($B$4:$B$14;$B21;D$4:D$14)

LG UweD
Anzeige
AW: noch was
01.07.2022 13:30:25
Thomas
Ja das sieht glaub ich so aus wie es sein soll, die Ergebnisse passe mal
AW: noch was
01.07.2022 14:02:07
UweD
Ok.
dann so

    Dim iR As Integer
Dim iC As Integer
Dim iLC As Integer
Dim iLR As Integer
Dim iZ1 As Integer, iS1 As Integer, iZE As Integer, iFr, iAnz
iZ1 = 4 'erste Zeile mit Daten
iS1 = 4 'erste Spalte mit Daten
iFr = 6 'Anzahl freie Zeilen bis Summenbereich
iAnz = 3 'Anzahl der Summenzeilen
iLR = Cells(Rows.Count, "B").End(xlUp).Row
iLC = Cells(4, Columns.Count).End(xlToLeft).Column
iZE = iLR - 2 'Start Summenbereich
With Cells(iZE, iS1).Resize(iAnz, iLC - iS1 + 1)
'Zählenwenn setzte
'Beispiel für D21:  =SUMMEWENN($B$4:$B$14;$B21;D$4:D$14)
.FormulaR1C1 = "=SUMIF(R" & iZ1 & "C2:R" & iZE - iFr - 1 & "C2,RC2,R" & iZ1 & "C:R" & iZE - iFr - 1 & "C)"
'Formel in Wert
.Value = .Value
End With
End Sub
LG UweD
Anzeige
AW: noch was
01.07.2022 15:03:02
Thomas
Hallo Uwe,
damit klappt es dann leider garnicht mehr....
Das Suchkriterium wird aus deinem Code auf B21 gesetzt, müsste aber B22 sein, allerdings wird dann trotzdem "falsch" summiert, da dann nicht jede 4 Zeile summiert wird, sondern immer die in der auch das Suchkriterium steht, aber für die D21 z.b. wäre das ja falsch.
Im Anhang die Beispieldatei mit deinem Code, ich hätte in D21 377 erwartet, in D22 367 und in D23 -10 , wie in deinem Screenshot eben auch.
AW: noch was
01.07.2022 15:19:17
UweD
Du hast eben geschrieben, dass das Beispiel so passt.
Jetzt doch nicht.
Jede 4. Zeile... das ist doch egal, wenn der Suchtext entsprechend in Spalte B dort steht
Also ich bin raus und lasse die Frage offen.
LG UweD
Anzeige
AW: VBA SummeWenn
30.06.2022 14:53:15
Herbert_Grom
Hallo,
in welcher Weise soll die Formel dynamisch sein? Zeilen und/oder Spalten einfügen?
Servus
AW: VBA SummeWenn
01.07.2022 08:01:07
Thomas
Hallo Herbert,
in sofern dynamisch, das es sein kann das es mal mehr und mal weniger Zeilen sind, die Spalten Anzahl ist fix.
Nur durch die unterschiedliche Zeilen Anzahl muss die Formel dynamisch sein.
Thomas

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige