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

Werte suchen und addieren(Tabellen zusammenführen)

Werte suchen und addieren(Tabellen zusammenführen)
27.03.2015 09:28:08
Tim
Hallo Leute,
ich habe in einer Excel-Datei mehrere Tabellenblätter. In jeder Tabelle gibt es die Spalte "Artikel" und die Spalte "Menge". Die Artikel sind hierbei "doppelt und dreifach" vorhanden. Ich möchte jetzt, dass die Artikel in dem Tabellenblatt "Gesamt" aufgelistet werden und dass die dazugehörigen Mengen addiert werden.
Ein weiteres Problem ist, dass ich keine Lösung finde dieses Makro beim ändern irgendeiner Zelle aus irgendeinem Tabellenblatt nochmals auszuführen (oder wenigstens per Knopfdruck).
Ich komm seit 2 Tagen nicht weiter und habe schon gefühlt halb Google durchgesucht.
Ich bin dankbar für jede Hilfe und jeden Tipp.
Gruß Tim

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
nun ....
27.03.2015 09:36:21
der
Hallo Tim,
... VBA-Cracks werden bestimmt fragen: Und wo ist Dein Makro?
Ich meine, wenn es sich nicht um zig-tausende Datensätze handelt, kann man das auch mit Formeln lösen.
Gruß Werner
.. , - ...

AW: nun ....
27.03.2015 09:41:59
Tim
Hallo Werner,
das Problem ist, dass immer wieder neue Tabellenblätter dazukommen. Deswegen kann ich keine Formeln benutzen.
Mein momentanes Makro:
Sub Makro1()
Application.ScreenUpdating = False
Sheets("Gesamt").Select
ActiveWindow.SelectedSheets.Delete
Dim i As Long
Const Fo As String = "=SumIf('xxx'!A:A,A1,'xxx'!I:I)"
Worksheets.Add before:=Sheets(1)
For i = 2 To Worksheets.Count
Worksheets(i).UsedRange.Columns(1).Copy
Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Next
Worksheets(1).Rows(1).Delete
Worksheets(1).Columns(1).RemoveDuplicates 1, xlNo
With Worksheets(1)
With .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp))
For i = 2 To Worksheets.Count
.Offset(0, 2).Formula = Replace(Fo, "xxx", Worksheets(i).Name)
.Offset(0, 2).Copy
.Offset(0, 1).PasteSpecial xlPasteValues, operation:=xlAdd
.Offset(0, 2).ClearContents
Next
End With
End With
Worksheets(1).Cells(1, 2).Value = "Menge"
Worksheets(1).Name = "Gesamt"
Columns("A:A").Select
ActiveWorkbook.Worksheets("Gesamt").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Gesamt").Sort.SortFields.Add Key:=Range("A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Gesamt").Sort
.SetRange Range("A2:B155")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Dim intRow As Integer, intLastRow As Integer
intLastRow = Cells.SpecialCells(xlCellTypeLastCell).Row
For intRow = intLastRow To 1 Step -1
If Application.CountA(Rows(intRow)) = 0 Then
intLastRow = intLastRow - 1
Else
Exit For
End If
Next intRow
For intRow = intLastRow To 1 Step -1
If IsEmpty(Cells(intRow, 1)) Then
Rows(intRow).Delete
End If
Next intRow
Application.ScreenUpdating = True
End Sub

Anzeige
AW: nun ....
27.03.2015 11:01:56
Klexy
Noch schöner wäre es, wenn du eine komplette Musterdatei hochlädst. Dann müssen wir die nicht selber bauen und ohne eine konkrete Date wird das keiner lösen können.
Dann sieht man auch Eigenschaften der Datei, die du hier nicht erwähnt hast, die aber evtl. wichtig für eine sinnvolle Lösung sein könnten.

AW: nun ....
27.03.2015 11:45:33
Klexy
Wird schon. Gemeinsam kriegen wir es gebacken.

Oha!
27.03.2015 11:56:20
Klexy
Die Musterdatei ist eher suboptimal
- sie enthält kein Makro
- sie enthält Leerspalten mittendrin (!?)
- die Mengenspalte ist in jedem Blatt in einer anderen Spalte ?!
Eine Musterdatei sollte sich von der tatsächlichen Datei praktisch nicht unterscheiden. Namen und Zahlen verfremden ist ok, aber nur im realistischen Bereich. Alles auf Null setzen bringt nichts. Wenn die Tabelle zur Lösung sortiert werden müsste, ginge das hier gar nicht, wegen den Leerspalten.

Anzeige
AW: Oha!
27.03.2015 12:02:35
Tim
ALso wie gesagt ein Makro an sich habe ich, jedoch funktioniert dieses nicht auf allen Tabellenblättern da ich einen Bereich zum rauskopieren bestimmen muss und genau das ist meine Frage. Ich kann keinen Bereich angeben, da sich die Mengenspalte in fast jedem Blatt ändert. Das mit den Leerzeilen wusste ich nicht jedoch sollte das irrelevant sein, da das Makro nur "Artikel" und "Menge" suchen soll. Aber okay ich geb an die Chefetage weiter, dass die Tabellen einheitlich sein müssen damit mein Makro funktioniert. Trotzdem danke für die Hilfe.

AW: Oha!
27.03.2015 12:15:20
Daniel
Hi
variable Spalten für die Menge lassen sich relativ einfach integrieren.
Voraussetzung ist, dass auf jedem Blatt in irgendeiner Zelle in Zeile 1 der Text "Menge" steht.
diese Spalte wird gesucht und für die auswertung verwendt.
Dazu musst du lediglich 2 Zeilen ändern:

Const Fo As String = "=SumIf('xxx'!C1,RC1,'xxx'!Cyyy)"

und

.Offset(0, 2).FormulaR1C1 = Replace(Replace(Fo, "xxx", Worksheets(i).Name), "yyy", Worksheets(i).Rows(1).Find(what:="Menge", lookat:=xlWhole).Column)

Gruß Daniel

Anzeige
AW: nun ....
27.03.2015 12:03:49
Daniel
Hi
dateien mit Makro nicht als xlsx speichern.
beim Speichern als xlsx werden die Makros gelöscht.
speicherst du die Makros als xlsm oder besser als xlsb, bleiben die Makros erhalten und findest eine Auflistung der ausführbaren Makros in:
ANSICHT - MAKROS - MAKROS ANZEIGEN
oder in
ENTWICKLERTOOLS - MAKROS - MAKROS ANZEIGEN
von dort aus kannst du das Makro starten.
wenn du einen button haben willst, dann schau mal hier rein:
http://www.online-excel.de/excel/singsel_vba.php?f=132
Gruß Daniel

Anzeige
AW: nun ....
27.03.2015 14:57:00
Klexy
Bin etwas spät dran. Daniel hat den Weg schon gezeigt. Das mit den unterschiedlichen Mengenspalten sah aus wie ein Versehen, daher meine Nachfrage.
Was ich noch ändern würde ist:
.SetRange Range("A2:B155")
ersetzen durch:
.SetRange Range(Cells(2, 1), Cells(Worksheets(1).UsedRange.Rows.Count, 2))
Dann bist du auch bei über 155 Datensätzen auf der sicheren Seite.
Wofür der Teil nach dem Sortieren ist, versteh ich aber nicht. Was soll da passieren?
Und warum löscht du die Gesamt-Liste erst, um sie dann wieder neu zu erstellen? Überschreiben wäre doch einfacher, oder?
Anzeige

309 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige