Kopieren von bestimmten Werten aus Tabelle A in B

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! :smile:

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. :smile:

Schönen Gruß,
Rado.

Hi Rado,

Funktioniert alles wunderbar! Ganz großes Dankeschön,
Reinhard!

Bitteschön :smile:

MVB = Microsoft Visual Basic. Steht zumindest so in Excel. :smile:

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