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

Dazu Summieren

Forumthread: Dazu Summieren

Dazu Summieren
13.12.2024 10:26:07
Hans
Hallo Liebe Gemeinde
Der Piet hatt mir sehr weitergeholfen, Funktioniert Einwandfrei, nochmals Danke an der Stelle :-)
Ich würde den Code nun gerne in einem anderen Prozess anwenden.
Was müsste ich am Code ändern wenn ich statt von der Quelldatei in die Zieldatei eintragen lassen, Dazusummieren möchte.
Es kann auch vorkommen dass eine Artikelnummer mehrmals vorkommt, dann sollte die Totale Menge in die Zieldatei dazusummiert werden.

Beispiel Zieldatei:
https://www.herber.de/bbs/user/174337.xlsm
Beispiel Quelldatei:
https://www.herber.de/bbs/user/174338.xlsx


Public Sub Update()

Dim obj_wkb_ziel As Workbook
Dim obj_wkb_quelle As Workbook
Dim obj_wks_quelle As Worksheet
Dim obj_wks_ziel As Worksheet
Dim lng_zeile_ziel As Long
Dim rng_fund As Range
Dim AC As Range 'ActiveCell
Dim n As Integer 'Fehlerzähler

Set obj_wkb_ziel = ThisWorkbook
Set obj_wks_ziel = obj_wkb_ziel.Worksheets("Zieldatei") ' Blattname ggf. ändern

Set obj_wkb_quelle = Workbooks.Open("\\eden-file\Ordnerumleitung\shsq\Desktop\Quelldatei.xlsx")
'Set obj_wkb_quelle = Workbooks.Open("\\eden-file\Ordnerumleitung\shsq\Desktop\Quelldatei.xlsx") ' Pfad und Dateiname ggf. anpassen
Set obj_wks_quelle = obj_wkb_quelle.Worksheets("DIAS") ' Blattname ggf. anpassen

Application.ScreenUpdating = False

With obj_wks_ziel
lng_zeile_ziel = .Cells(Rows.Count, 1).End(xlUp).Row
.Range("B2:H" & lng_zeile_ziel).ClearContents
Application.ScreenUpdating = False

'Schleife in Zieldatei sucht Artikel Nr. in Quelldatei
For Each AC In .Range("A2:A" & lng_zeile_ziel)
Set rng_fund = obj_wks_quelle.Columns(1).Find(AC, LookIn:=xlFormulas, lookat:=xlWhole)
If Not rng_fund Is Nothing Then
'3 Spalten kopieren bis Spalte "DIAS"
rng_fund.Offset(0, 6).Resize(1, 3).Copy
AC.Offset(0, 1).PasteSpecial xlPasteValues
'3 Spalten nach "DIAS" kopieren
rng_fund.Offset(0, 10).Resize(1, 3).Copy
AC.Offset(0, 4).PasteSpecial xlPasteValues
Else
AC.Offset(0, 7) = "No Find": n = n + 1
End If
Next AC
End With

Application.CutCopyMode = False
If n > 0 Then MsgBox n & " Daten nicht gefunden"

Set obj_wks_ziel = Nothing
Set obj_wks_quelle = Nothing

Set obj_wkb_quelle = Nothing
Set obj_wkb_ziel = Nothing

Application.ScreenUpdating = True
End Sub


Gruss Hans
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dazu Summieren
13.12.2024 12:55:27
Yal
Hallo Hans,

wenn ich es richtig verstehe, ist das Ziel, dass die Werte AC.Offset( ... nicht überschrieben, sondern kumuliert werden.
Es bedeutet, dass der Bereich "B2:H" & LetzteZeile nicht gelöscht werden soll.

Public Sub Update()

Dim wsQ As Worksheet 'Q für Quelle
Dim LetzteZeile As Long
Dim rngFund As Range
Dim Z As Range 'Z wie Zelle
Dim nFehler As Integer 'Fehlerzähler
Dim i As Integer

Set wsQ = Workbooks.Open("\\eden-file\Ordnerumleitung\shsq\Desktop\Quelldatei.xlsx").Worksheets("DIAS") ' Blattname ggf. anpassen
Application.ScreenUpdating = False
With ThisWorkbook.Worksheets("Zieldatei") ' Blattname ggf. ändern
LetzteZeile = .Cells(Rows.Count, 1).End(xlUp).Row
'Schleife in Zieldatei sucht Artikel Nr. in Quelldatei
For Each Z In .Range("A2:A" & LetzteZeile)
Set rngFund = wsQ.Columns(1).Find(Z.Value, LookIn:=xlFormulas, lookat:=xlWhole)
If Not rngFund Is Nothing Then
For i = 1 To 3
Z.Offset(, i) = Z.Offset(, i).Value + rngFund.Offset(, 5 + i).Value '3 Spalten kopieren bis Spalte "DIAS"
Z.Offset(, 3 + i) = Z.Offset(, 3 + i).Value + rngFund.Offset(, 9 + i).Value '3 Spalten nach "DIAS" kopieren
Next i
Else
Z.Offset(, 7) = "Not found": nFehler = nFehler + 1
End If
Next AC
End With
Application.ScreenUpdating = True
If nFehler > 0 Then MsgBox nFehler & " Daten nicht gefunden"
End Sub


VG
Yal
Anzeige
AW: Dazu Summieren
13.12.2024 13:32:09
Hans
Hallo Yal
dein Code geht, nur was er noch machen müsste wenn in der Quelldatei mehrmals die gleiche Artikelnummer gefunden wird die Totale Summe dazuzählen in der Ziehldatei
Danke für deine Bemühungen.
Gruss Hans
AW: Dazu Summieren
13.12.2024 13:57:32
Yal
Hallo Hans,

die richtige Antwort kann nur Anhand der richtige Frage kommen. Wer von Quelle und Ziel spricht, definiere wo Daten gelesen und wo geschrieben wird.

In dem Fall geht es darum, die Quelle zu dem Ziel zu addieren und anschliessend das Ergebnis in die Quelle zu schreiben, bzw. zu überschreiben.

Von einem solchen Verfahren würde ich dringend abraten: wenn aus versehen das Makro zweimal läuft (und das wird es, glaub mir), dann hast Du im Ziel und Quelle gefälschte Daten und die Situation ist nur zu retten, wenn Du es merkst, bevor Du die Datei speicherst, oder eine gesunde Backup-Strategie hast.

VG
Yal
Anzeige
AW: Dazu Summieren
13.12.2024 14:16:55
Hans
Hallo Yal
Von der Quelle werden Daten nur gelesen, und dann in das Ziel geschrieben.
Also die Quelle wird zum Ziel Addiert und anschliesend in das Ziel geschrieben.
Die Quelle kommt einmal pro Woche neu rein.
Gruss Hans
AW: Dazu Summieren
13.12.2024 14:46:23
Yal
Hallo Hans,

so kommen wir Schritt für Schritt weiter in Richtung der richtige Frage.

Was der Code bisher macht:
- es liest eine einzelne Schlüssel in Spalte A des Zielblattes
- sucht das erste Ergebnis in die Quelle
- wenn gefunden, kopiert die Werte zum Treffer ins Ziel
- weiter mit nächste Schlüssel

Was Du haben möchtest:
- es liest eine einzelne Schlüssel in Spalte A des Zielblattes
- für jede Ergebnis in die Quelle, kopiert die Werte zum Treffer ins Ziel
- weiter mit nächste Schlüssel

Die Unterschied liegt daran, dass es solang gesucht werden soll, bis alle Treffer in der Quelle behandelt wurden.
Das heisst wiederum, dass der Bereich B2:Hxx doch zuerst geleert werden soll.

Public Sub Update()

Dim wsQ As Worksheet 'Q für Quelle
Dim LetzteZeile As Long
Dim rngFund As Range
Dim Z As Range 'Z wie Zelle
Dim nFehler As Integer 'Fehlerzähler
Dim i As Integer
Dim ErsteAdresse As String

Set wsQ = Workbooks.Open("\\eden-file\Ordnerumleitung\shsq\Desktop\Quelldatei.xlsx").Worksheets("DIAS") ' Blattname ggf. anpassen
With ThisWorkbook.Worksheets("Zieldatei") ' Blattname ggf. ändern
LetzteZeile = .Cells(Rows.Count, 1).End(xlUp).Row
.Range("B2:H" & LetzteZeile).ClearContents
Application.ScreenUpdating = False
'Schleife in Zieldatei sucht Artikel Nr. in Quelldatei
For Each Z In .Range("A2:A" & LetzteZeile)
Set rngFund = wsQ.Columns(1).Find(Z.Value, LookIn:=xlFormulas, lookat:=xlWhole)
If Not rngFund Is Nothing Then
ErsteAdresse = rngFund.Address
Do
For i = 1 To 7
If i > 4 Then Z.Offset(0, i) = Z.Offset(0, i).Value + rngFund.Offset(0, 5 + i).Value '7 Spalten summiert kopieren, ausser 4te Spalte "DIAS"
Next i
Set rngFund = wsQ.Columns(1).FindNext()
Loop While rngFund.Address > ErsteAdresse
Else
Z.Offset(0, 7) = "Not found": nFehler = nFehler + 1
End If
Next AC
End With

Application.CutCopyMode = False
If nFehler > 0 Then MsgBox nFehler & " Daten nicht gefunden"
Application.ScreenUpdating = True
End Sub

VG
Yal
Anzeige
AW: Dazu Summieren
13.12.2024 15:28:27
Hans
Hallo Yal
Das einzige wo noch nicht geht ist,
wenn mehrere Gleiche Art.nummern in der Quelle soll er die Summe davon in die Zieldatei addieren.
Gruss Hans
AW: Dazu Summieren
13.12.2024 16:13:26
Yal
Hallo Hans,

beweise mir bitte, dass es nicht schon so ist.

VG
Yal
AW: Dazu Summieren
13.12.2024 16:38:15
Hans
Hallo Yal
Ich lag falsch.
Hatte da noch übereste vom alten Code drinnen.
Besten Dank
VG Hans
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18