Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1956to1960
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 | Summenbildung über verschiedene Spalten

VBA | Summenbildung über verschiedene Spalten
05.12.2023 17:04:29
X3do
Hallo zusammen,

ich versuche aktuell folgende Problemstellung zu lösen und komme leider einfach nicht weiter.
Meine Datenquelle 1 ist wie folgt aufgebaut:
2
2 3
2 4 3
1 2 2 2
2 4 4 2 3
2 4 4 2 4 3

Diese soll mit der Datenquelle 2 abgeglichen werden:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

Dabei ist eine Summe zu bilden basierend auf der Quelle 1 als Kriterium (1,2,3,4) und darauf aufbauend wird eine Summe alle Werte aus Quelle 2 erzeugt.
Die Ergebnisse sind in separate Zellen auszugeben.

Dafür habe ich mir folgendes überlegt:

Sub SummWenn2()
'Deklarieren Sie die Variablen
Dim Startpunkt As Range 'Der Startpunkt der Daten
Dim Bereich As Range 'Der Bereich, in dem die SummWenn-Funktion angewendet wird
Dim Summe(1 To 4) As Double 'Die Summen der korrespondierenden Werte für jede Zahl von 1 bis 4
Dim Wert As Variant 'Der Wert, der in einem Feld enthalten sein kann
Dim Zeile As Long 'Die aktuelle Zeile
Dim Spalte As Long 'Die aktuelle Spalte
Dim Ergebnis As Range 'Der Bereich, in dem die Ergebnisse angezeigt werden
Dim LetzteZeile As Long 'Die letzte Zeile der Daten

'Initialisieren Sie die Variablen
Set Startpunkt = Range("B2") 'Ändern Sie dies nach Bedarf
Set Bereich = Range("I2:I22") 'Ändern Sie dies nach Bedarf
Set Ergebnis = Range("K2:N2") 'Ändern Sie dies nach Bedarf, so dass es eine Zeile und vier Spalten hat
Zeile = Startpunkt.Row
Spalte = Startpunkt.Column

'Schleife durch die Daten, bis der Startpunkt eine Leerzelle ist
Do While Not IsEmpty(Startpunkt)
'Finden Sie die letzte Zeile der Daten in der aktuellen Spalte
LetzteZeile = Cells(Rows.Count, Spalte).End(xlUp).Row
'Schleife durch die Spalte, bis eine Leerzelle erreicht wird
Do While Not IsEmpty(Cells(Zeile, Spalte))
'Schleife durch die Zahlen von 1 bis 4
For Wert = 1 To 4
'Wenden Sie die SummWenn-Funktion an, um zu überprüfen, ob der Wert in der Zelle enthalten ist
'Beschränken Sie den Bereich auf die Zellen, die den Daten entsprechen
If WorksheetFunction.SumIf(Cells(Zeile, Spalte), Wert, Bereich.Cells(Zeile, 1).Resize(LetzteZeile - Zeile + 1)) > 0 Then
'Merken Sie sich die Zelle und addieren Sie die Summe aus dem korrespondierenden Bereich
Summe(Wert) = Summe(Wert) + WorksheetFunction.SumIf(Cells(Zeile, Spalte), Wert, Bereich.Cells(Zeile, 1).Resize(LetzteZeile - Zeile + 1))
End If
Next Wert
'Gehen Sie zur nächsten Zeile in der Spalte
Zeile = Zeile + 1
Loop
'Springen Sie zum Startpunkt zurück und gehen Sie eine Spalte nach rechts und eine Zeile nach unten
Zeile = Startpunkt.Row + 1
Spalte = Startpunkt.Column + 1
Set Startpunkt = Cells(Zeile, Spalte)
Loop

'Schreiben Sie die Summen in den Ergebnisbereich
For Wert = 1 To 4
'Ändern Sie die Zellen im Ergebnisbereich, so dass sie der aktuellen Spalte entsprechen
Ergebnis.Cells(1, Wert) = Summe(Wert)
Next Wert
End Sub

Leider erhalte ich durchgehend eine falsche Summe:

5 50 20 37
112

Hat hier jemand eine Idee, was ich anpassen muss?

Grüße

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA | Summenbildung über verschiedene Spalten
05.12.2023 20:26:31
Uduuh
Hallo,
vergiss mal alles, was du über dein Problem weißt und lies deinen Post. Dann stehst du wahrscheinlich genauso dumm da, wie ich.
Beschreibe dein Problem mit einfachen Worten und nicht mit einem (augenscheinlich falschen) Code. Was soll erreicht werden?

Gruß aus'm Pott
Udo
AW: VBA | Summenbildung über verschiedene Spalten
05.12.2023 21:29:54
X3do
Hallo Udo,

vielen Dank für deine Rückmeldung.
Ich versuche es mal🙈

Folgendes Problem würde ich gerne lösen.
Ich habe den Datensatz 1 der aus den Zahlen 1 bis 4 besteht.
Diese stehen in einem Bereich, der wie im Beispiel aufgebaut ist.

2
3 4
1 2 3
2 3 4 1

In einem zweiten Datensatz stehen Werte, wie im Beispiel die entsprechend dem Datensatz 1 gruppiert ( Summe) werden sollen.

12
109
164
1
2
3
754
Usw.

Spalte 1 müsste dann zum Beispiel für das Kriterium 2 die Summe 13 ergeben.
Dazu soll dann noch aus Spalte 2 für das Kriterium 2 der Wert 3 addiert werden.

Als Ergebnis würde dann für das Kriterium 2 die Summe 16 stehen.

Ist das so verständlicher?

Gruß




Anzeige
AW: VBA | Summenbildung über verschiedene Spalten
05.12.2023 22:41:49
Yal
Verständlicher? nein.

Dein Satz "Spalte 1 müsste dann zum Beispiel für das Kriterium 2 die Summe 13 ergeben."

"Spalte 1" bezieht sich wohl auf "Datensatz 1". Wenn ja, dann sage es (was eigentlich eher eine "Datenblock" ist, aber gut)

"Kriterium 2" äh? Wo war bis jetzt die Rede von "Kriterium 2"? Eventuell gibt es ein "Datensatz 2".

"die Summe 13 ergeben". Wieso? die erste Spalte von Datensatz 1 würde hier 2+3+1+2 = 8 ergeben, nicht 13. 13 ist auch nicht in Datensatz 2 zu finden.

Was auch immer welche Kino in deinem Kopf entstanden ist, ist nicht viel in die Erklärung durchgekommen. Ich weiss, es ist schwierig, etwas zu erklären. Aber eine richtige Erklärung ist nicht selten ein grossen Teil der Lösung.

VG
Yal
Anzeige
AW: VBA | Summenbildung über verschiedene Spalten
05.12.2023 21:15:51
Yal
Hallo X3 (man spricht sich im Forum per Vorname an ;-)

+1 für Udo: welche Masochist würde sich so etwas antun, zu versuchen zu verstehen, was Du hier meinst ... ausser ich.

Meinst Du so etwas:
Public Sub AnzahlWenn()

Const cStart = "B2"

For i = 1 To WorksheetFunction.Max(Range(cStart).CurrentRegion)
With Range("K1000").End(xlUp) ' Spalten K, L, M werden mit Ergebnisse befüllt
.Value = i
.Offset(, 1).Value = WorksheetFunction.CountIf(Range(cStart), i) 'Anzahl
.Offset(, 2).Value = .Offset(, 1).Value * i 'Anzahl * Wert = "Summe"
End With
Next
End Sub


VG
Yal
Anzeige
AW: VBA | Summenbildung über verschiedene Spalten
05.12.2023 21:22:29
Yal
ich depp, so besser:

Public Sub AnzahlWenn()

Const cStart = "B2"

For i = 1 To WorksheetFunction.Max(Range(cStart).CurrentRegion)
With Range("K1000").End(xlUp) ' Spalten K, L, M werden mit Ergebnisse befüllt
.Value = i
.Offset(, 1).Value = WorksheetFunction.CountIf(Range(cStart).CurrentRegion, i) 'Anzahl // nicht nur von cStart, sondern alles drum rum
.Offset(, 2).Value = .Offset(, 1).Value * i 'Anzahl * Wert = "Summe"
End With
Next
End Sub


VG
Yal
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige