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

Makro gesucht

Makro gesucht
26.11.2014 12:39:02
Maria
Hallo,
ich bin neu hier im Forum und schreibe heute meinen ersten Beitrag.
Ich hoffe das es für euch verständlich ist.
Meine Frage:
Ich habe eine Umsatzliste mit ca. 8000 Einträgen unserer Kunden mit u.a. Termin, Artikel-Nr. und Menge.
Die Artikel wiederholen sich, sowie die Kunden und die Temine ebenfalls.
Ich möchte erreichen das pro Termin, Kunde und Artikel die Mengen zu einer Summe zusammengefasst werden.
Es soll also nur eine Zeile (pro Termin, Kunde, Artikel) übrig bleiben, die anderen sollen gelöscht werden.
Mit Pivot komme ich hier nicht weiter.
Kann man das mit einem Makro lösen?
Hat jemand eine Idee?
Vielen Dank im Voraus.
Freundliche Grüße
Maria
Userbild

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro gesucht
26.11.2014 12:56:14
selli
hallo
Mit Pivot komme ich hier nicht weiter.
pivot ist genau für solche fälle gedacht.
was genau gefällt dir denn an pivot nicht?
gruß
selli

AW: Makro gesucht
26.11.2014 13:20:59
Maria
Hallo Selli,
ich muss das Ergebnis in eine andere Tabelle weiterbearbeiten.
Das geht mit Pivot nicht.
Gruß
Maria

AW: Makro gesucht
26.11.2014 13:48:06
selli
hallo maria,
gibt es auch eine beispieldatei?
gruß
selli

natürlich noch offen --------e.o.m.
26.11.2014 13:58:24
selli

AW: Makro gesucht
26.11.2014 16:21:11
Maria
Sorry,
ich habe die Beispieldatei jetzt hochgeladen.
Gruß
Maria
https://www.herber.de/bbs/user/94038.xls

Anzeige
Noch zu testen, ...
26.11.2014 15:02:31
Frank
... da keine Beispieldaten.
Hallo Maria,
so in etwa sollte es gehen. Die verschachtelten IF-THEN müssten allerdings noch getestet werden.
Sub Summe()
Sheets(2).Cells(1, 1).Value = "Termin"
Sheets(2).Cells(1, 2).Value = "KdNr"
Sheets(2).Cells(1, 3).Value = "KdTxt"
Sheets(2).Cells(1, 4).Value = "ArtNr"
Sheets(2).Cells(1, 5).Value = "Summe"
lZ1 = Sheets(1).Range("A1").End(xlDown).Row
For i = 1 To lZ1
Z1 = 0
lZ2 = Sheets(2).Range("A1").End(xlDown).Row
T1 = Sheets(1).Cells(i, 1).Value
F1 = Sheets(1).Cells(i, 2).Value
K1 = Sheets(1).Cells(i, 3).Value
A1 = Sheets(1).Cells(i, 4).Value
B1 = Sheets(1).Cells(i, 5).Value
For j = 2 To lZ2
If T1 = Sheets(2).Cells(j, 1).Value Then
If F1 = Sheets(2).Cells(j, 2).Value Then
If A1 = Sheets(2).Cells(j, 4).Value Then
Sheets(2).Cells(j, 5).Value = Sheets(2).Cells(j, 5).Value + B1
Z1 = 0
Else
Z1 = Z1 + 1
End If
Else
Z1 = Z1 + 1
End If
Else
Z1 = Z1 + 1
End If
Next
If Z1 > 0 Then
Sheets(2).Cells(lZ2 + 1, 1).Value = T1
Sheets(2).Cells(lZ2 + 1, 2).Value = F1
Sheets(2).Cells(lZ2 + 1, 3).Value = K1
Sheets(2).Cells(lZ2 + 1, 4).Value = A1
Sheets(2).Cells(lZ2 + 1, 5).Value = B1
End If
Next
End Sub

Grüsse,
Frank

Anzeige
AW: Noch zu testen, ...
26.11.2014 16:33:59
selli
hallo maria,
folgender code ist zu 98% HaJos werk.
habe ihn nur deinen bedürfnissen angepasst.
es wird ein neues tabellenblatt mit deiner zusammenfassung erzeugt.
Sub loeschen()
Dim LoAnzahl As Long                                        ' Variable ob Datensatz doppelt
Dim Loletzte As Long                                    ' Variable letzte Zeile
Dim LoI As Long                                         ' Schleifenvariable Zeile
Dim LoJ As Long                                         ' Schleifenvariable Spalte
' Variable ob doppelt für aktuellen  _
Datensatz
Dim ByAnzahl As Byte
Application.ScreenUpdating = False                      ' Bildschirmanzeige aus
' letzte Zeile feststellen
Loletzte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
' alte Tabelle "Neu" löschen,  _
Tabelle1 kopieren und umbenennen in "Neu"
On Error Resume Next                                    ' Fehlerbehandlung ausschalten
Application.DisplayAlerts = False                       ' Mitteilungen aus
Worksheets("Neu").Delete                                ' Tabelle "Neu" löschen
Application.DisplayAlerts = True                        ' Mitteilungen ein
On Error GoTo 0                                         ' Fehlerbehandlung einschalten
ActiveSheet.Copy Before:=Worksheets(1)                  ' aktuelle Tabelle kopieren und vor  _
die 1. Tabelle einfügen
With ActiveSheet
.Name = "Neu"                                       ' Tabelle in "Neu" umbenennen
End With
' Sortieren der Daten nach Spalte A  _
und B ohne Überschrift
Range("A1:E8000").Sort Key1:=Range("A1"), Order1:=xlAscending, _
Key2:=Range("B1"), Order1:=xlAscending, Key3:=Range("D1"), Order1:=xlAscending, Header:= _
xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
' Variable auf 1, Kennzeichen  _
erster Datensatz
LoAnzahl = 1
' Schleife über alle Zeilen, von  _
der letzten bis zu ersten
For LoI = Loletzte - 1 To 1 Step -1
ByAnzahl = 0                                        ' Variable für Doppelt auf 0
' Schleife von Spalte A bis Spalte  _
D
For LoJ = 1 To 4
' jeden Wert der Spalte mit dem  _
Wert der Zelle darüber vergleichen
If Cells(LoI, LoJ) = Cells(LoI + 1, LoJ) Then
ByAnzahl = ByAnzahl + 1                     ' Zellen stimmen überein
End If
Next LoJ
' stimmen 4 Werte überein ist die  _
Zeile doppelt
If ByAnzahl = 4 Then
Cells(LoI + 1, 5) = Cells(LoI + 1, 5) + Cells(LoI, 5)
Rows(LoI).Delete                                ' Zeile löschen
LoAnzahl = LoAnzahl + 1                         ' doppelte Datensätze zählen
Else
' Datensatz ist doppelt, löschen
'If LoAnzahl > 1 Then Rows(LoI + 1).Delete
LoAnzahl = 1
' Variable für doppelt auf 1 setzen
End If
Next LoI
Application.ScreenUpdating = True                       ' Bildschirmanzeige ein
End Sub

gruß
selli

Anzeige
AW: Noch zu testen, ...
26.11.2014 17:04:23
Maria
Hallo selli,
vielen Dank für deine Mühe (Dank auch an HaJo) und die schnelle Hilfe.
Das Makro funktioniert super,- ganz toll.
Danke.
Bis zum nächsten Mal.
Liebe Grüße
Maria

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige