Werte mit gleicher Auftragsnummer addieren
Hallo Zusammen,
ich habe ein Excel-sheet mit Auftragsnummer, Kunde und Betrag.
Jetzt möchte ich alle Beträge mit gleicher Auftragsnummer addiert haben.
Problem: - Die Beträge sind nicht als eine Zahl definiert, - Im Betrag stehen Tausender mit einem Punkt (z.B. 3.550,50),
Ich habe schon eine Funktion mit der ich den "Punkt" aus dem Betrag entfernen kann:
Nun brauche ich noch eine Funktion mit der ich die Beträge addieren kann.
Auch hier habe ich eine Funktion mit der ich experimentierte
Die Funktion addiert den Betrag mit gleicher Auftragsnummer der Tabelle1 und fügt quasi einen neuen sheet hinzu mit den bearbeiteten Daten.
Allerdings addiert diese Funktion nur ganze Zahlen (also keine Kommastellen). Dazu müsste ich die Zahl in Double umwandeln aber bekomme ich leider nicht hin.
Ich wäre sehr dankbar, wenn mir jemand helfen könnte.
ich habe ein Excel-sheet mit Auftragsnummer, Kunde und Betrag.
Jetzt möchte ich alle Beträge mit gleicher Auftragsnummer addiert haben.
Problem: - Die Beträge sind nicht als eine Zahl definiert, - Im Betrag stehen Tausender mit einem Punkt (z.B. 3.550,50),
Ich habe schon eine Funktion mit der ich den "Punkt" aus dem Betrag entfernen kann:
Public Sub Zeichenloeschung()
Dim i As Long
Dim Start As String
Dim Ende As String
Dim Temp As String
Dim erlaubt As String
erlaubt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890,<> " ' <- hier werden die Zeichen definiert, die erlaubt sind;
' Groß-/Kleinschreibung wird ignoriert
Application.ScreenUpdating = False ' Bildschirm-Aktualisierung wird hier deaktiviert;
' Ansonsten dauert der Vorgang noch ein wenig länger, da er sonst jede Änderung sofort anzeigt
For Each C In Selection
With C
Temp = ""
For i = 1 To Len(.Text)
If InStr(1, erlaubt, Mid(.Text, i, 1), vbTextCompare) > 0 Then
Temp = Temp & Mid(.Text, i, 1)
End If
Next i
.Value = Temp
End With
Next C
Application.ScreenUpdating = True ' Jetzt wird die Anzeige wieder aktualisiert
End Sub
Nun brauche ich noch eine Funktion mit der ich die Beträge addieren kann.
Auch hier habe ich eine Funktion mit der ich experimentierte
Sub Semih_Formel_fuer_Martina()
QTabelle = "Summary" 'Quelltabelle
QAbZeile = 1 'Überschriftenzeile in Quelltabelle
QAbSpalte = 2 'Nummer der 1. Datenspalte in Quelltabelle
QBSpalte = "L" 'Spalte für Betrag in Quelltabelle
Spalten = 2 'Spaltenanzahl für Vergleich
ZTabelle = "Details" 'Zieltabelle
ZAbZeile = 1 'Überschriftenzeile in Zieltabelle
ZAbSpalte = 1 'Nummer der 1. Datenspalte in Zieltabelle
ZBSpalte = "D" 'Spalte für Betag in Zieltabelle
Delim = "§" 'Trennzeichen - darf in den Daten nicht vorkommen
Set d = CreateObject("Scripting.Dictionary") 'Dictionary zum Zwischenspeichern der (konsolidierten) Zeile erzeugen
QZeile = QAbZeile 'in Überschriftenzeile der Quelltabelle starten
With Worksheets(QTabelle)
Do Until .Cells(QZeile, QAbSpalte) = "" 'Zeilen bearbeiten, bis in erster Spalte kein Wert mehr vorhanden
K = "" 'Schlüssel initialisieren
For i = 0 To Spalten - 1 'alle Schlüsselspalten durchgehen
K = K & Delim & .Cells(QZeile, QAbSpalte + i) 'Schlüssel zusammensetzen
Next
K = Mid(K, 2) 'erstes Zeichen ist ein Trennzeichen - weglassen
Betrag = Val(.Cells(QZeile, QBSpalte)) 'Betrag auslesen
If d.Exists(K) Then 'Wenn schon ein Eintrag für diesen Schlüssel vorhanden, ...
d.Item(K) = d.Item(K) + Betrag '... Betrag addieren, ...
Else
d.Add K, Betrag '... ansonsten Eintrag erstellen
End If
QZeile = QZeile + 1 'nächste Zeile der Quelltabelle
Loop
End With
T = d.Keys 'Schlüssel-Texte in Array übernehmen
B = d.Items 'Beträge detto
With Worksheets(ZTabelle)
.Cells.ClearContents 'Zieltabelle löschen
ZZeile = ZAbZeile 'in Überschriftenzeile der Zieltabelle beginnen
For i = 0 To UBound(T) 'alle konsolidierten Einträge durchgehen
'Schlüssel-Text wieder in Spalten zerlegen und eintragen
.Cells(ZZeile, ZAbSpalte).Resize(1, Spalten) = Split(T(i), Delim)
.Cells(ZZeile, ZBSpalte) = B(i) 'Betrag(ssumme) eintragen
ZZeile = ZZeile + 1 'nächste Zeile der Zieltabelle
Next
End With
End Sub
Die Funktion addiert den Betrag mit gleicher Auftragsnummer der Tabelle1 und fügt quasi einen neuen sheet hinzu mit den bearbeiteten Daten.
Allerdings addiert diese Funktion nur ganze Zahlen (also keine Kommastellen). Dazu müsste ich die Zahl in Double umwandeln aber bekomme ich leider nicht hin.
Ich wäre sehr dankbar, wenn mir jemand helfen könnte.
Please also mark the comments that contributed to the solution of the article
Content-Key: 248803
Url: https://administrator.de/contentid/248803
Printed on: April 26, 2024 at 20:04 o'clock
8 Comments
Latest comment
Hallo semih55, Willkommen auf Administrator.de!
Warum so viel Aufwand wenn's doch so einfach mit einer Formel geht :
SummeWenn
Lässt sich aber auch in VBA verwenden:
Grüße Uwe
Warum so viel Aufwand wenn's doch so einfach mit einer Formel geht :
SUMMEWENN(Bereich;Suchkriterien;[Summe_Bereich])
Lässt sich aber auch in VBA verwenden:
Application.WorksheetFunction.SumIf(Arg1, Arg2, Arg3)
Arg1 Erforderlich Range Bereich – der Zellbereich, der nach Kriterien ausgewertet werden soll.
Arg2 Erforderlich Variant Kriterien – die Kriterien in Form einer Zahl, eines Ausdrucks oder Texts, mit dem definiert wird, welche Zellen addiert werden. Kriterien können beispielsweise als 32, "32", ">32", oder "Äpfel" angegeben werden.
Arg3 Optional Variant Summe_Bereich – die tatsächlich zu addierenden Zellen, wenn die entsprechenden Zellen in Bereich auf Kriterien zutreffen. Wenn Summe_Bereich ausgelassen wird, werden die Zellen im Bereich sowohl nach Kriterien ausgewertet als auch addiert, sofern sie Kriterien entsprechen.
Und wenn es unbedingt ein Makro sein muss, habe ich hier schon mal ein Makro zum selben Thema gespostet:
Werte aus einer Tabelle vergleichen, einlesen und addieren
und für die Umwandlung in eine Zahl kannst du bspw. CDbl("1.200,30") nutzen.
Werte aus einer Tabelle vergleichen, einlesen und addieren
und für die Umwandlung in eine Zahl kannst du bspw. CDbl("1.200,30") nutzen.
Könntest du mit bitte für meine konkrete Funktion weiterhelfen?
Ich arbeite schon lange mit Excel, aber so umständlich hab ich's schon lange nicht mehr erlebt aber egal jedem das seine.Dieser Abschnitt sollte so aussehen: (dort hattest du die Funktion VAL() verwendet, die den Betrag immer in einen Integer-Wert ohne Nachkomma gewandelt hat!
...
Betrag = CDbl(.Cells(QZeile, QBSpalte).Value)
If d.Exists(K) Then
d.Item(K) = CDbl(d.Item(K)) + Betrag
Else
....
Grüße Uwe
p.s. gewöhne dir mal an, die Variablen und deren Variablen-Typen (string/integer/double) vor der Verwendung entsprechend zu deklarieren, dann kommt es nicht zu solchen Effekten.