Hallo, kann mir jemand helfen?
Ich habe eine Mappe „A“ mit den Tabellenblättern „Überblick“, „Januar“, „Februar“, „März“, etc. bis „Dezember“. In diesen Tabellenblättern sind Daten in den Spalten „A“ bis „L“ und Zeilen „2“ bis „5000“. In Zeile „1“ sind die Überschriften mit einem Autofilter.
Nun möchte ich, dass bestimmte Zeilen aus dem Tabellenblatt „Januar“ dieser Mappe „A“ in das Tabellenblatt „Januar“ der Mappe „XYC“ kopiert wird, wenn in Spalte „C“ ein bestimmter Text („ABC“) eingegeben ist. Das selbe wünsche ich mir für die anderen Tabellenblätter („Februar“, „März“, etc. bis „Dezember“) auch.
Vielen Dank!
Ich habe eine Mappe „A“ mit den Tabellenblättern „Überblick“,
„Januar“, „Februar“, „März“, etc. bis „Dezember“. In diesen
Tabellenblättern sind Daten in den Spalten „A“ bis „L“ und
Zeilen „2“ bis „5000“. In Zeile „1“ sind die Überschriften mit
einem Autofilter.
Nun möchte ich, dass bestimmte Zeilen aus dem Tabellenblatt
„Januar“ dieser Mappe „A“ in das Tabellenblatt „Januar“ der
Mappe „XYC“ kopiert wird, wenn in Spalte „C“ ein bestimmter
Text („ABC“) eingegeben ist. Das selbe wünsche ich mir für die
anderen Tabellenblätter („Februar“, „März“, etc. bis
„Dezember“) auch.
Hi Rado,
kopiere die Überschriftenzeile aus Mappe „A“ Januar Zeile1 nach Mappe „XYZ“ Januar Zeile 1, dort dann in C2 ABC eintragen.
Nun Daten–Filter–Spezialfilter …
Gruß
Reinhard
Danke für deine schnelle Antwort, Reinhard!
Das Problem ist, dass täglich eine ganze Menge von Zeilen dazukommen und mir es am liebsten wäre, wenn es automatisch funktionieren könnte!
Quasi so, dass ich Daten in die Tabelle A eintrage und sie in der Tabelle XYZ automatisch gezogen werden. Aber halt nicht alle, sondern nur die mit einem bestimmten text in Spatle C der Tabelle A.
Das wird wahrscheinlich nur mit einem Makro oder VBA gehen. Leider kenne ich mich da absolut gar nicht aus!
Ich werde deinen Vorschlag trotzdem natürlich mal ausprobieren und schauen, wie es so zu handhaben ist in der täglichen Arbeit! Nochmals Danke!
Das Problem ist, dass täglich eine ganze Menge von Zeilen
dazukommen und mir es am liebsten wäre, wenn es automatisch
funktionieren könnte!
Quasi so, dass ich Daten in die Tabelle A eintrage und sie in
der Tabelle XYZ automatisch gezogen werden. Aber halt nicht
alle, sondern nur die mit einem bestimmten text in Spatle C
der Tabelle A.
Hi Rado,
das geht auch vollautomatisch, aber teste vorher mal dieses Makro.
Speichere deine Mappen „A“ und XYZ" unter anderem Namen ab.
Im Code setzt du dann diese Kopienamen ein bei:
Set wkbQ = Workbooks(„A“) ’ Q=Quelle
Set wkbZ = Workbooks(„XYZ“) ’ Z=Ziel
Um den Code einzugeben, Alt+F11, im Editor siehst du links eine Liste, markiere den Eintrag wo der Name der Kopie von „A“ steht, dann Einfügen—Modul.
Dort meinen Code reinkopieren. Im Code die beiden Namen abändern, Editor schließen.
In der Kopie von „A“ dann Alt+F8 und das Makro „Filter“ ausführen lassen.
Berichte dann hier ob und was geschieht.
Gruß
Reinhard
Option Explicit
'
Sub Filter()
Dim ZeiQ As Long, ZeiZ As Long, M As Byte, wkbQ As Workbook, wkbZ As Workbook
Application.ScreenUpdating = False
Set wkbQ = Workbooks("A") ' Q=Quelle
Set wkbZ = Workbooks("XYZ") ' Z=Ziel
For M = 1 To 12
wkbZ.Worksheets(MonthName(M)).UsedRange.ClearContents
ZeiZ = 1
With wkbQ.Worksheets(MonthName(M))
.Rows(1).Copy Destination:=wkbZ.Worksheets(MonthName(M)).Range("A1")
For ZeiQ = 1 To .Range("A" & .Rows.Count).End(xlUp).Row
If .Cells(ZeiQ, 3) = "ABC" Then
ZeiZ = ZeiZ + 1
.Rows(ZeiQ).Copy Destination:=wkbZ.Worksheets(MonthName(M)).Cells(ZeiZ, 1)
End If
Next ZeiQ
End With
Next M
Application.ScreenUpdating = True
End Sub
Nachdem ich auf „Ausführen“ klicke, kommt folgende Fehlermeldung:
Laufzeitfehler ‚9‘: Index außerhalb des gültigen Bereichs
Ich kann jetzt auf „Beenden“ oder „Debuggen“ klicken. Ich klicke auf „Debuggen“. Dann lande ich wieder im Editor und folgende Zeile ist gelb markiert:
Set wkbQ = Workbooks(„Test_Wareneingang“) ’ Q=Quelle
Vielleicht habe ich was falsch gemacht. Ich habe Alt+F11 in meiner umbenannten Tabelle A geklickt. Dort stand dann nirgens der Name dieser Tabelle. Nur „Diese Arbeitsmappe“. Also habe ich dort das Modul eingefügt.
Hallo,
unter
http://www.excelformeln.de/formeln.html?welcher=24
findest Du einen SVERWEIS nach links; vielleicht hilft Dir das ja weiter.
Falls Du Dich mit SVERWEIS nicht auskennst, frag einfach noch mal nach.
Gruß Verena
Hi Rado,
Laufzeitfehler ‚9‘: Index außerhalb des gültigen Bereichs
Ich kann jetzt auf „Beenden“ oder „Debuggen“ klicken. Ich
klicke auf „Debuggen“. Dann lande ich wieder im Editor und
folgende Zeile ist gelb markiert:
Set wkbQ = Workbooks(„Test_Wareneingang“) ’ Q=Quelle
ändere das auf
Set wkbQ = Workbooks(„Test_Wareneingang.xls“)
Vielleicht habe ich was falsch gemacht. Ich habe Alt+F11 in
meiner umbenannten Tabelle A geklickt. Dort stand dann nirgens
der Name dieser Tabelle. Nur „Diese Arbeitsmappe“. Also habe
ich dort das Modul eingefügt.
Der Name „Test_Wareneingang.xls“ muß da stehen.
Gruß
Reinhard
Ich habe das geändert. Aber es passiert genau das gleiche. Nur > ist jetzt die Zeile darunter gelb markiert, wenn ich auf „Debuggen“ klicke. Deswegen habe ich dort auch nocheinmal „.xls“ hintergeschrieben. Doch der Fehler ist immer noch da…
Ich habe das geändert. Aber es passiert genau das gleiche. Nur
> ist jetzt die Zeile darunter gelb markiert, wenn ich
auf „Debuggen“ klicke. Deswegen habe ich dort auch nocheinmal
„.xls“ hintergeschrieben. Doch der Fehler ist immer noch da…
Hi Rado,
wenn die Mappe Test_Wareneingang.xls geöffnet ist, in der gleichen Excelinstanz, so kann es bei
Set wkbQ = Workbooks(„Test_Wareneingang.xls“) ’ Q=Quelle
m.E. keinen Fehler geben.
Gruß
Reinhard
Es funktioniert soweit alles! Vielen Dank!
Mein Fehler war, dass ich die zweite Mappe nicht geöffnet hatte. Doch jetzt ist alles bestens! 
Einige Fragen habe ich allerdings noch…
- Neben dem Text „ABC“ in der dritten Spalte, gibt es noch einige andere (z.B. „FGH“, „KLÖ“, „IOP“, u.a.), die auch in andere Mappen müssen. Es kommen des öfteren auch immer wieder neue hinzu. Gibt es vielleicht die Möglichkeit, dass ich das Makro immer um eine gewisse Passage erweitere, so dass diese in Mappen kopiert werden, die ich dann selbst erzeuge?
Bis hier her nochmals vielen herzlichen Dank für die Hilfe!
- Neben dem Text „ABC“ in der dritten Spalte, gibt es noch
einige andere (z.B. „FGH“, „KLÖ“, „IOP“, u.a.), die auch in
andere Mappen müssen. Es kommen des öfteren auch immer wieder
neue hinzu. Gibt es vielleicht die Möglichkeit, dass ich das
Makro immer um eine gewisse Passage erweitere, so dass diese
in Mappen kopiert werden, die ich dann selbst erzeuge?
Hi Rado,
ja, das geht, das Makro braucht aber die Information welchen namen die Datei hat wohin die Zeilen der Ausgangstabelle die in C z.B. „ABC“ haben kopiert werden sollen.
Also einen logischen Zusammenhang wie z.B
Alle Zeilen die in C „ABC“ stehen haben kommen in Datei Dateiabc.xls Tabelle1
Alle Zeilen die in C „FGH“ stehen haben kommen in Datei Dateifgh.xls Tabelle1
Gruß
Reinhard
Kann ich dazu den bisherigen Code benutzen?
Könntest Du mir vielleicht bei Gelegenheit so einen Code schreiben, dass ich ihn nur mit dem jeweiligen Text ergänze und dann einfüge?
Kann ich dazu den bisherigen Code benutzen?
Könntest Du mir vielleicht bei Gelegenheit so einen Code
schreiben, dass ich ihn nur mit dem jeweiligen Text ergänze
und dann einfüge?
Hi Rado,
in
Datei = Array(„Ziel1.xls“, „Ziel2.xls“, „Ziel3.xls“, „Ziel4.xls“)
die Zieldatein auflisten.
In der Select-Schleife für jeden Eintrag im Array Datei einen Case-Zweig nach diesem Aufbaumuster einfügen:
Case "ABC3"
Zei(3) = Zei(3) + 1
.Rows(ZeiQ).Copy Destination:=Workbooks(Datei(3)).Worksheets(MonthName(M)).Range("A" & Zei(3))
Case Else
ist immer der letzte (unterste) Case-Zweig
Option Explicit
Option Base 1
'
Sub Filter()
Dim ZeiQ As Long, M As Byte, wkbQ As Workbook, D As Integer, Datei
Datei = Array("Ziel1.xls", "Ziel2.xls", "Ziel3.xls", "Ziel4.xls")
Application.ScreenUpdating = False
Set wkbQ = Workbooks("Quelle.xls") ' Q=Quelle
ReDim Zei(UBound(Datei))
For M = 1 To 12
With wkbQ.Worksheets(MonthName(M))
For D = 1 To UBound(Datei)
Workbooks(Datei(D)).Worksheets(MonthName(M)).UsedRange.ClearContents
.Rows(1).Copy Destination:=Workbooks(Datei(D)).Worksheets(MonthName(M)).Range("A1")
Zei(D) = 1
Next D
For ZeiQ = 1 To .Range("A" & .Rows.Count).End(xlUp).Row
Select Case .Cells(ZeiQ, 3).Value
Case "ABC1"
Zei(1) = Zei(1) + 1
.Rows(ZeiQ).Copy Destination:=Workbooks(Datei(1)).Worksheets(MonthName(M)).Range("A" & Zei(1))
Case "ABC2"
Zei(2) = Zei(2) + 1
.Rows(ZeiQ).Copy Destination:=Workbooks(Datei(2)).Worksheets(MonthName(M)).Range("A" & Zei(2))
Case "ABC3"
Zei(3) = Zei(3) + 1
.Rows(ZeiQ).Copy Destination:=Workbooks(Datei(3)).Worksheets(MonthName(M)).Range("A" & Zei(3))
Case "ABC4"
Zei(4) = Zei(4) + 1
.Rows(ZeiQ).Copy Destination:=Workbooks(Datei(4)).Worksheets(MonthName(M)).Range("A" & Zei(4))
Case Else
' nix
End Select
Next ZeiQ
End With
Next M
Application.ScreenUpdating = True
End Sub
Gruß
Reinhard
Kann ich ein Ziel auch mehrmals vergeben? Also, Text „ABC“ oder Text „DFG“ oder Text „UIO“ in Ziel „ABC“?
Dann noch eine Frage nebenbei… Dieser ganze Code, zählt das eher zum 1x1 vom „Programmieren“ oder ist das eher was sehr kniffliges? Ich spiele nämlich mit dem Gedanken, mir so ein Einsteiger Lernbuch für MVB (oder so) zu kaufen…
Hi Rado,
Kann ich ein Ziel auch mehrmals vergeben? Also, Text „ABC“
oder Text „DFG“ oder Text „UIO“ in Ziel „ABC“?
Case "ABC3","DFG","UIO"
Zei(3) = Zei(3) + 1
.Rows(ZeiQ).Copy Destination:=Workbooks(Datei(3)).Worksheets(MonthName(M)).Range("A" & Zei(3))
Dann noch eine Frage nebenbei… Dieser ganze Code, zählt das
eher zum 1x1 vom „Programmieren“ oder ist das eher was sehr
kniffliges? Ich spiele nämlich mit dem Gedanken, mir so ein
Einsteiger Lernbuch für MVB (oder so) zu kaufen…
Was ist MVB?
Der Code zählt zu den Grundlagen.
Gruß
Reinhard
Funktioniert alles wunderbar! Ganz großes Dankeschön, Reinhard!
Es werden sicherlich in nächster Zeit noch mal fragen auftauchen. Dann melde ich mich wieder!
MVB = Microsoft Visual Basic. Steht zumindest so in Excel. 
Schönen Gruß,
Rado.
Hi Rado,
Funktioniert alles wunderbar! Ganz großes Dankeschön,
Reinhard!
Bitteschön 
MVB = Microsoft Visual Basic. Steht zumindest so in Excel. 
Aha, aber das wird in der Praxis nicht benutzt. Da wird zwischen VB und VBA unterschieden und Excel-VBA ist was anderes als Word-VBA oder CorelDraw-VBA.
Alle haben bestimmte VB-Befehle gemeinsam aber auch immer eigene Befehle.
Generell kann man sagen, VBA hat eine Teil- bzw. Untermenge von VB-Befehlen plus Spezialbefehlen der jeweiligen VBA-Anwendung.
Schau mal ganz unten in der Artikelliste hier im Brett, da gibt es kostenlos online ein gutes Buch zu Vba.
Ansonsten, kauf dir für den Anfang über ebay o.ä. ein dickes Buch zu VBA unter Excel97. Bei den Grundlagen hat sich da wenig geändert(mal XL007 weglassend)
Gruß
Reinhard