Excel Zellen kopieren nach bestimmten Kriterien mittels VBA

Hallo liebe Experten,

ich möchte gerne gewisse Zelleinträge von einem Tabellenblatt in ein anderes kopieren, wenn eins von mehreren Kriterien erfüllt wird.

In der Quelltabelle steht in Spalte A eine Liste von Dokumenten, in der Spalte B kann den Dokumenten ein Status vergeben werden (Status: Gestartet, Erstellt, Nicht zutreffend)
Wenn der Status Gestartet oder Erstellt gewählt ist, dann sollen alle Dokumente in die Zieltabelle übertragen werden. Beim Status Nicht zutreffend soll keine Übertragung statt finden.
In der Zieltabelle, sollen die Dokumente in die Spalte B eingetragen werden und in Spalte A eine laufende ID vergeben werden.

Das Ganze soll mittels Button loslaufen.

Den Button hab ich schon :wink: und auch schon irgendwie stumpfsinnig etwas Code angefangen, der zumindest schon mal Quelltabelle und Zieltabelle auswählt aber nur ganze Zeilen kopiert und nicht da wo ich hin will…

Kann mir jemand helfen?

Liebe Grüße
Ela

Hallo Ela,

nach deinen Beschreibungen klingt das machbar. Könntest du evtl. deine Mappe (oder zumindest aussagekräftige Teile davon und auch deinen angefangenen Code) mal hochladen, z.B. hier: http://www.file-upload.net/
Und noch ein paar Fragen:
Zur „laufenden ID“: Sollen das Zahlen sein, die in der ersten Zeile mit 1 beginnen und für jeden neuen Eintrag einfach hochgezählt werden? Oder gibt’s da andere Kriterien?

Angenommen, du hast in der Zieltabelle schon Einträge. Was soll damit passieren, wenn du jetzt wieder deinen Button klickst. Sollen die Einträge dann unten drunter wiederholt werden, mit neue IDs? Oder sollen schon vorhandene Einträge nicht noch einmal aus der Quelltabelle kopiert werden?

Wie gesagt: Map Mappe hochladen. Dann wird es vermutlich klarer werden.

Gruß, Andreas

Hallo Andreas,

Datei ist unter http://www.file-upload.net/download-9232791/Mappe1.x…
Hatte mir da was aus nem Forum geholt.
In der Variable c speichert er die Position, wo er den gesuchten Begriff findet und kopiert dann die gesamte Zeile.
Steh irgendwie voll auf dem Schlauch, wie ich ihm jetzt sagen kann, gehe von der gefundenen Zeile eins nach vorne und übertrage das… Geschweige denn noch weitere Begriffe suchen und übertragen…
Mach leider nur alle Jubeljahre mal was mit VBA und hab da echt so große Lücken…

Zu den Fragen:
die laufende ID ist eine Zahl, die bei 1 beginnt und sich je Dokumentenzeile hochzählt.
Wenn der Button nochmal geklickt wird, soll darauf hingewiesen werden, dass die bereits existierende Liste überschrieben wird und wenn Ja, dann einfach überschreiben…

Viele Grüße
Ela

Hallo Ela,

das geht natürlich mit einer VBA Programmierung. Aber vielleicht auch einfacher „zu Fuß“ wie folgt:

  1. In die Ursprungstabelle einen Filter setzen und dann Spalte B Filtern nach allen Eintragungen die nicht gleich „Nicht zutreffend“ sind.

  2. Das Ergebnis dieser Filterung dann gesamt markieren, kopieren und auf einem neuen Tabellenblatt einfügen.

Auf diesem neuen Tabellenblatt findest Du dann nur die gefilterten Werte.

Hilft das oder muss es wirklich die VBA-Programmierung sein?

Hallo Dubidu13,

das ist natürlich der einfachste Weg.
Leider benutzen das dann nicht unbedingt Excelspezis, die auch eine Filterung schon überfordert.
Und so eine Lösung mit Button ist natürlich auch schick…

Viele Grüße
Ela

Viele Grüße
Ela

'nabend Ela,

ich hab dir hier mal deine Datei mit einem Makro und einem Button (war entgegen deiner Aussage noch nicht drin) bestückt:
http://www.file-upload.net/download-9233483/Mappe1.x…

Schau mal, ob er das tut, was du willst und gib ein „Zurück-Fütter“.

Gruß, Andreas

Nabend Andreas,

Du bist der Hammer :smile:
Sorry für den Button, der ist in meinen Tausend Arbeitsdateien in machen verschütt gegangen, da ich da den Code direkt mit Haltepunkten ausgeführt habe, damit ich a bisserl was versteh. Und natürlich dann auch in der Datei die ich Dir bereit gestellt habe.

Funzt genau wie ich es haben wollte… Und das mit so wenig Zeilen Code … Ich hätte da jetzt sicherlich mit komplizierte Denken mindestens das 4fache hingestellt…
DANKE DANKE DANKE

Noch einen wunderschönen Abend
Ela

Freut mich! owT
.

Hallo Ela,
wenn du es mit einer VBA-Prozedur machen willst, dann versuche mal meinen Entwurf:
Kopiere ihn in den VBA-Editor (Alt+F11)

Public Sub Kopie_nach_Kriterien()
'Zuerst das Ende der Quelltabelle feststellen.
'Sie beginnt in Tabelle1 bei A2 (in A1 steht der Tabellenkopf)
'Die Zieltabelle Tabelle2 beginnt in Zelle A1/B1 (Tabellenkopf) und die Daten ab A2 bzw. B2
'Falls hier schon Einträge stehen, muss auch hier die letzte Zeile ermittelt werden,
'ab der dann die neuen Einträge übernommen werden.
Dim letzteZeile1 As Integer
Dim letzteZeile2 As Integer
Dim d As Range
Dim i As Single
With Sheets(„Tabelle1“)
    'Zählvariable i
    i = 0
    letzteZeile1 = .Range(„A1“).CurrentRegion.Rows.Count
    letzteZeile2 = Sheets(„Tabelle2“).Range(„A1“).CurrentRegion.Rows.Count
    For Each d In .Range(„A2:A“ & letzteZeile)
        If d.Offset(0, 1) = „Gestartet“ Or d.Offset(0, 1) = „Erstellt“ Then
            i = i + 1
            'Lfd. Nr. in A
            Sheets(„Tabelle2“).Range(„A“ & letzteZeile2 + i) = Sheets(„Tabelle2“).Range(„A“ & letzteZeile2) + i
            'Dateiname in B
            Sheets(„Tabelle2“).Range(„B“ & letzteZeile2 + i) = d.Value
        End If
    Next d
End With
End Sub

Die Erklärungen stehen in den Kommentaren.

Wenn du den Button schon hast, geh mit der rechten MT drauf und binde das Makro ein.

Schönes Wochenende
Jürgen