Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zellen kopieren, wenn Bedingungen erfüllt

Forumthread: Zellen kopieren, wenn Bedingungen erfüllt

Zellen kopieren, wenn Bedingungen erfüllt
02.06.2005 15:59:15
Daniel
Guten Tag,
ich möchte per Makro gerne Werte aus Zellen eines Blattes in die Zellen eines zweiten Blattes kopieren, wenn zwei Bedingungen zutreffen. Dabei sollen fortlaufende Zeilen überprüft werden.
Wenn in Tabelle2 in Zelle G2 der Wert identisch ist mit dem Wert in Zelle G2 der Tabelle1 UND in Zelle A2 der Tabelle2 der Wert gleich Zelle A2 in Tabelle1, dann soll der Wert aus Zelle E2 aus Tabelle1 nach E2 in Tabelle2 kopiert werden.
Das Ganze soll bis zur letzten gefüllten Zeile in der Tabelle2 durchgeführt werden.
Da es keine Möglichkeit gibt diesen Schritt anderweitig besser zu lösen, würde ich dafür gerne ein Makro haben, v.a. weil diese Operation über mehrere Blätter durcgeführt werden muss.
Vielen Dank für Hilfe,
Daniel
Anzeige

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen kopieren, wenn Bedingungen erfüllt
02.06.2005 16:15:25
IngGi
Hallo Daniel,
nachfolgendes Makro mußt du in ein benutzerdefiniertes Modul deiner Datei im Makro-Editor kopieren. Du gehst dafür zunächst mit Alt+F11 in den Makro-Editor. Dann fügst du mit Einfügen-Modul ein Modul ein und kopierst schließlich das Makro in das große Fenster auf der rechten Seite. Gestartet wird das Makro in Excel über Extras-Makro-Makros-Kopieren und klick auf "Ausführen".
Public

Sub Kopieren()
Dim rng As Range
For Each rng In Sheets("Tabelle2").Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))
If Sheets("Tabelle1").Cells(rng.Row, 1) = Sheets("Tabelle2").Cells(rng.Row, 1) And _
Sheets("Tabelle1").Cells(rng.Row, 7) = Sheets("Tabelle2").Cells(rng.Row, 7) Then
Sheets("Tabelle1").Cells(rng.Row, 5).Copy _
Destination:=Sheets("Tabelle2").Cells(rng.Row, 5)
End If
Next rng
End Sub

Gruss Ingolf
Anzeige
AW: Zellen kopieren, wenn Bedingungen erfüllt
02.06.2005 16:23:10
Daniel
Hallo Ingolf,
beim Auführen des Makros wird diese Zeile gelb markiert:
For Each rng In Sheets("Tabelle2").Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))
Was muss ich machen?
Grüße,
Daniel
AW: Zellen kopieren, wenn Bedingungen erfüllt
02.06.2005 16:41:47
IngGi
Hallo Daniel,
versteh ich nicht, warum das nicht funzt. Tuts bei mir allerdings auch nicht. Ersetz die Zeile mal hiermit, das hat bei mir jetzt funktioniert:
For Each rng In Sheets("Tabelle2").Range("A2:A" & Range("A65536").End(xlUp).Row)
Gruss Ingolf
Anzeige
AW: Zellen kopieren, wenn Bedingungen erfüllt
02.06.2005 16:47:29
Daniel
Komisch, jetzt tut sich gar nichts.
Grüße,
Daniel
AW: Zellen kopieren, wenn Bedingungen erfüllt
03.06.2005 10:47:30
Daniel
Ich habe hier nochmal eine Beispieldatei:

Die Datei https://www.herber.de/bbs/user/23590.xls wurde aus Datenschutzgründen gelöscht

Über Hilfe würde ich mich sehr freuen!
Daniel
AW: Zellen kopieren, wenn Bedingungen erfüllt
03.06.2005 14:26:46
IngGi
Hallo Daniel,
bei mir läuft das Makro. Natürlich mußt du die Namen der Tabellenblätter anpassen. Die heissen ja anders, als du angegeben hast. Ich hab die Tabellenblätter jetzt mal einfach über den Index angesprochen. Ausserdem hab ich beim Kopierbefehl noch was verändert, da er sonst auch die Formatierungen mitkopiert. Eine Vermutung, warum sich bei dir nichts tut, hab ich allerdings noch. Kann es sein, dass du im Tabellenblatt "Open Trades" nicht die Spalte G (Price), sondern die Spalte J (Target) vergleichen willst?
https://www.herber.de/bbs/user/23607.xls

Gruss Ingolf
Anzeige
AW: Zellen kopieren, wenn Bedingungen erfüllt
03.06.2005 14:49:44
Daniel
Hallo Ingolf,
danke. Ich Idiot hatte die ganze zeit übersehen, dass ich das erste Blatt verändert hatte. Ja, ich meinte J und nicht G.
Jetzt geht es natürlich. Danke!
Grüße,
Daniel
AW: Zellen kopieren, wenn Bedingungen erfüllt
03.06.2005 15:51:27
Daniel
Hallo Ingolf,
jetzt ist mir gerade etwas aufgefallen, an das ich zunächst nicht gedacht hatte.
Die Werte in den beiden Blättern stimmen nicht so überein, dass die zugehörigen in den "gleichen" Zeilen stehen.
Das heißt, man müsste zunächst in der kompletten Spalte A des Blattes "Open Trades" suchen, ob es eine Übereinstimmung mit Zelle A2 des Blattes "PT" gibt. Dabei kann es vorkommen, dass es mehrere Übereinstimmungen gibt.
Wurden nun Übereinstimmungen gefunden, so sollen die Werte der Spalten G und J verglichen werden. Stimmen diese nun zusätzlich überein, so soll E kopiert werden.
Zum bessern Verständnis habe ich eine Beispieldatei kreiert:
https://www.herber.de/bbs/user/23613.xls
Vielen Dank und beste Grüße,
Daniel
Anzeige
AW: Zellen kopieren, wenn Bedingungen erfüllt
03.06.2005 16:48:00
IngGi
Hallo Daniel,
ist sichergestellt, dass es, bezogen auf deine Beispieldatei, keine 2 JENG.DE, jeweils mit demselben Target gibt? Wenn beide JENG.DEs im Blatt PT aus deinem Beispiel ein Target von 8,86 hätten, dann gäbe es Probleme, weil er für beide den ersten Eintrag im Blatt "Open Trades" finden würde. Dadurch würde er in beide Zeilen im Blatt PT einen Wert von 1795 aus der Spalte E reinschreiben. Die zweite übereinstimmende Zeile in Blatt "Open Trades" mit einem Wert von 1848 in Spalte E würde untergehen.
Gruss Ingolf
Anzeige
AW: Zellen kopieren, wenn Bedingungen erfüllt
03.06.2005 16:50:30
Daniel
Hallo Ingolf,
danke, dass Du Dich nochmal um mich kümmerst.
Im Normalfall ist das so, dass es keine zwei gelichen Targets gibt.
Sicherheitshalber wäre es aber gut, wenn man da eine Messagebox einbauen könnte, die sich meldet, wenn das doch mal der Fall sein sollte.
Besten Dank,
Daniel
Anzeige
AW: Zellen kopieren, wenn Bedingungen erfüllt
03.06.2005 17:57:55
IngGi
Hallo Daniel,
heute krieg ich das nicht mehr hin. Ich laß die Frage daher mal offen und schau am Montag wieder rein.
Gruss Ingolf
AW: Zellen kopieren, wenn Bedingungen erfüllt
06.06.2005 11:41:58
IngGi
Hallo Daniel,
nachfolgendes Makro steigt bei Doppelfällen mit einer Nachricht für den Benutzer aus der Bearbeitung aus.

Sub finden_kopieren()
Dim rngPT As Range, rngOT1 As Range, rngOT2 As Range, Doppelt As Boolean
For Each rngPT In Sheets("PT").Range("A2:A" & Range("A65536").End(xlUp).Row)
Set rngOT1 = Sheets("Open Trades").Range("A:A").Find(what:=rngPT, lookat:=xlWhole)
If Not rngOT1 Is Nothing Then
If rngPT.Offset(0, 6) = rngOT1.Offset(0, 9) Then
Set rngOT2 = Range(rngOT1.Offset(1, 9), rngOT1.Offset(0, 6).End(xlDown)) _
.Find(what:=rngPT.Offset(0, 6), lookat:=xlWhole)
If Not rngOT2 Is Nothing Then
If rngOT2.Offset(0, -9) = rngPT Then Doppelt = True
End If
If Doppelt = False Then
Do
Set rngOT2 = Range(rngOT1.Offset(1, 0), rngOT1.End(xlDown)).FindNext
If rngOT2 Is Nothing Then Exit Do
If rngOT2.Offset(0, -9) = rngPT.Offset(0, 6) Then Doppelt = True
Loop
End If
If Doppelt = True Then
MsgBox ("Achtung!!! Doppelfall in Blatt 'Open Trades'.")
Else
rngPT.Offset(0, 4) = rngOT1.Offset(0, 9)
Exit Sub
End If
End If
End If
Next rngPT
End Sub

Gruss Ingolf
Anzeige
Tut sich nix....
06.06.2005 12:00:39
Daniel
Hallo Ingolf,
zunächst vielen Dank für Deine Mühe.
Im Moment geht aber leider noch nichts.
Kann es sein, dass Du mit den Spalten etwas durcheinander geraten bist?
Könntest Du vielleicht dem Code noch kurze Kommentare hinzufügen, so dass ich Ihn ändern und verstehen kann. Das wäre auch sehr nett.
Grüße,
Daniel
Anzeige
AW: Tut sich nix....
06.06.2005 14:02:45
IngGi
Hallo Daniel,
der Exit Sub-Befehl war in der falschen Bedingung der If-Prüfung. Das hab ich korrigiert und ein paar Kommentare eingefügt. Ich hoffe, das ist einigermaßen verständlich. Der Ablauf ist nämlich ziemlich komplex. Daher hier auch noch eine kurze Beschreibung:
Das Makro nimmt sich die erste Zelle in Spalte A von Blatt PT, also A2
In Spalte A des Blattes Open Trades wird jetzt nach einem identischen Eintrag gesucht
Wenn gefunden, wird in der gleichen Zeile (also Zeile 2 in PT und Zeile der vorher gefundenen Zelle in Open Trades) die Spalte G/J verglichen.
Jetzt muß noch auf Doppelfälle geprüft werden. Dazu wird der Inhalt der Spalte G in PT gesucht, und zwar in allen Zellen der Spalte J in Open Trades, von der aktuellen Zelle (= Zelle, die vorher in Spalte A gefunden wurde), bis zur letzten beschriebenen Zelle.
Dabei werden allerdings alle Zellen gefunden, die beim Vergleich der Spalten G/J identisch sind, unabhängig davon, ob sie auch beim Vergleich der Spalte A identisch sind. Derher muß die Spalte A bei der gefundenen Zeile auch noch mal geprüft werden.
Wenn kein Doppelfall gefunden wird, wird in einer Endlosschleife (Do...Loop) weitergesucht (auch hier wieder zuerst Vergleich der Spalten G/J und anschließend nochmal der Vergleich der Spalte A). Die Endlosschleife wird über den Befehl Exit Do verlassen, sobald ein Doppelfall gefunden und der Merker auf True gesetzt wurde oder der Vergleich der Spalten G/J zu keinem Ergebnis mehr führt (rngOT2=Nothing).
Wenn auch in der Endlosschleife kein Doppelfall gefunden wird, wird die Spalte E übertragen und das Makro macht mit der nächsten Zelle in Spalte A, Blatt PT weiter.

Sub finden_kopieren()
Dim rngPT As Range      'Verweist auf die Zelle in TB "PT", Spalte A, die gerade bearbeitet wird
Dim rngOT1 As Range     'Verweist auf die gefundene Zelle in TB "Open Trades", Spalte A
Dim rngOT2 As Range     'Verweist auf die gefundene Zelle in TB "Open Trades", Spatle J
Dim Doppelt As Boolean  'Merker für Doppelfälle
'Bearbeite im Blatt PT alle Zellen von A2 bis A? (letzte beschriebene Zelle in Spalte A)
For Each rngPT In Sheets("PT").Range("A2:A" & Range("A65536").End(xlUp).Row)
'Suche Zelle in Open Trades, Spalte A, mit gleichem Inhalt, wie aktuell bearbeitete Zelle in PT
Set rngOT1 = Sheets("Open Trades").Range("A:A").Find(what:=rngPT, lookat:=xlWhole)
'Wenn Zelle mit gleichem Inhalt gefunden ...
If Not rngOT1 Is Nothing Then
'Wenn der Inhalt der Zelle 6 Spalten rechts von rngPT (=Blatt PT, Spalte G)
'gleich dem Inhalt der Zelle 9 Spalten rechts von rngOT1 (=Blatt Open Trades, Spalte J, dann...
If rngPT.Offset(0, 6) = rngOT1.Offset(0, 9) Then
'Suche nach doppelter Zelle in Open Trades, Spalte J, Zeile der vorher gefundenen Zelle
'in Spalte A bis letzte beschriebene Zelle in Spalte J.
Set rngOT2 = Range(rngOT1.Offset(1, 9), rngOT1.Offset(0, 6).End(xlDown)) _
.Find(what:=rngPT.Offset(0, 6), lookat:=xlWhole)
'Wenn doppelte Zelle gefunden...
If Not rngOT2 Is Nothing Then
'Prüfen, ob Eintrag in Spalte A ebenfalls identisch und wenn ja, Merker auf True
If rngOT2.Offset(0, -9) = rngPT Then Doppelt = True
End If
'Wenn doppelte Zelle nicht gefunden ...
If Doppelt = False Then
Do '... weitersuchen nach doppelter Zelle
Set rngOT2 = Range(rngOT1.Offset(1, 0), rngOT1.End(xlDown)).FindNext
'Wenn beim Weitersuchen doppelte Zelle nicht gefunden, raus aus Do...Loop-Schleife
If rngOT2 Is Nothing Then Exit Do
'Sonst prüfen, ob Eintrag in Spalte A ebenfalls identisch und wenn ja, Merker auf True
If rngOT2.Offset(0, -9) = rngPT.Offset(0, 6) Then Doppelt = True
Loop
End If
'Wenn doppelte Zelle gefunden...
If Doppelt = True Then
'...Nachricht ausgeben...
MsgBox ("Achtung!!! Doppelfall in Blatt 'Open Trades'.")
'...und Makro beenden.
Exit Sub
Else
'Wenn doppelte Zelle nicht gefunden, Spalte E übertragen und weiter mit nächster
'Zelle in Blatt PT, Spalte A...
rngPT.Offset(0, 4) = rngOT1.Offset(0, 9)
End If
End If
End If
Next rngPT
End Sub

Gruss Ingolf
Anzeige
AW: Tut sich nix....
06.06.2005 15:17:07
Daniel
Hallo Ingolf,
super, das sieht doch schon verdammt gut aus. Danke.
Leider hat nicht alles zu 100% geklappt.
Ich lade meine Beispieldatei nochmal hoch. Ich habe eine Zelle markiert, die nicht bearbeitet wurde. Eigentlich sollte in dieser Zelle 1848 stehen.

Die Datei https://www.herber.de/bbs/user/23667.xls wurde aus Datenschutzgründen gelöscht

Grüße,
Daniel
Anzeige
AW: Tut sich nix....
06.06.2005 17:13:08
IngGi
Hallo Daniel,
da war noch ein dicker Fehler drin. Wenn er einen gleichen Eintrag in Spalte A findet, aber die entsprechende Zelle in Spalte G/J stimmt nicht überein, dann muß er natürlich noch nach weiteren Übereinstimmungen der Spalte A suchen. Das hab ich jetzt eingebaut. Mit Hilfe der Variablen lngZeile wird der Suchbereich in Spalte A jetzt variabel definiert. D.h. wenn er zwar eine Übereinstimmung in Spalte A findet, diese Zeile aber in Spalte G/J nicht übereinstimmt, wird lngZeile um 1 hochgezählt, damit er beim Weitersuchen nicht wieder die gleiche Zeile findet wie vorher, also die, in der zwar Spalte A übereinstimmt, nicht jedoch Spalte G/J. Schau's dir mal an.
https://www.herber.de/bbs/user/23669.xls
Gruss Ingolf
Anzeige
Super!!!!!!
06.06.2005 17:25:52
Daniel
Hi Ingolf,
das ist echt klasse. Vielen Dank für die Hilfe!
Echt super, das das jetzt geht.
Beste Grüße,
Daniel
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Zellen kopieren, wenn Bedingungen erfüllt


Schritt-für-Schritt-Anleitung

Um mit Excel VBA Zeilen in ein anderes Tabellenblatt zu kopieren, wenn eine bestimmte Bedingung erfüllt ist, folge diesen Schritten:

  1. Öffne den VBA-Editor: Drücke Alt + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke auf Einfügen und dann auf Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub Kopieren()
       Dim rng As Range
       For Each rng In Sheets("Tabelle2").Range("A2:A" & Sheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Row)
           If Sheets("Tabelle1").Cells(rng.Row, 1) = Sheets("Tabelle2").Cells(rng.Row, 1) And _
           Sheets("Tabelle1").Cells(rng.Row, 7) = Sheets("Tabelle2").Cells(rng.Row, 7) Then
               Sheets("Tabelle1").Cells(rng.Row, 5).Copy _
               Destination:=Sheets("Tabelle2").Cells(rng.Row, 5)
           End If
       Next rng
    End Sub
  4. Starte das Makro: Gehe zu Extras > Makro > Makros, wähle Kopieren aus und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Fehler bei der Zeile: Wenn du folgende Fehlermeldung erhältst: „Objektvariable oder With-Blockvariable nicht festgelegt“, überprüfe, ob die Tabellennamen korrekt sind.

  • Makro wird nicht ausgeführt: Stelle sicher, dass das Arbeitsblatt, in dem die Daten kopiert werden sollen, nicht geschützt ist.

  • Falscher Vergleich: Wenn das Makro nicht funktioniert, überprüfe, ob die Werte in den Zellen wirklich übereinstimmen. Es könnte sein, dass du die falschen Spalten vergleichst.


Alternative Methoden

Falls du die Daten nicht per VBA kopieren möchtest, kannst du auch die Funktion WENN in Kombination mit SVERWEIS nutzen, um Werte zu übernehmen, wenn eine Bedingung erfüllt ist. Hier ist ein einfaches Beispiel:

=WENN(SVERWEIS(A2;Tabelle1!A:E;5;FALSCH)=E2;"Kopieren";"")

Mit dieser Formel kannst du die Werte in der Spalte E von Tabelle1 in Tabelle2 übernehmen, wenn eine Übereinstimmung gefunden wird.


Praktische Beispiele

  1. Beispiel für das Kopieren von Werten: Du möchtest alle Zeilen aus Tabelle1 kopieren, wenn der Wert in Spalte A mit dem in Tabelle2 übereinstimmt und der Wert in Spalte G ebenfalls übereinstimmt. Nutze das oben gezeigte Makro.

  2. Beispiel für das Übertragen von Daten: Wenn du eine Zelle in Tabelle2 hast, die den Wert von Tabelle1 in Spalte E übernehmen soll, wenn der Wert in Spalte A übereinstimmt:

    If Sheets("Tabelle1").Cells(rng.Row, 1) = Sheets("Tabelle2").Cells(rng.Row, 1) Then
       Sheets("Tabelle2").Cells(rng.Row, 5) = Sheets("Tabelle1").Cells(rng.Row, 5)
    End If

Tipps für Profis

  • Fehlerbehandlung: Füge On Error Resume Next am Anfang des Makros hinzu, um das Makro robuster zu machen.

  • Optimierung: Verwende Application.ScreenUpdating = False zu Beginn und Application.ScreenUpdating = True am Ende des Makros, um die Ausführungsgeschwindigkeit zu erhöhen.

  • Variablen benennen: Achte darauf, Variablen sinnvoll zu benennen. Das verbessert die Lesbarkeit deines Codes.


FAQ: Häufige Fragen

1. Kann ich mehrere Bedingungen hinzufügen?
Ja, du kannst mehrere Bedingungen mit And oder Or verknüpfen, um die gewünschten Zeilen zu kopieren.

2. Wie kann ich das Makro anpassen, um andere Spalten zu vergleichen?
Ändere die Spaltenreferenzen im Code, um andere Spalten zu vergleichen oder zu kopieren. Achte darauf, dass die Logik der Bedingungen weiterhin stimmt.

3. Funktioniert das in allen Excel-Versionen?
Ja, das VBA-Makro sollte in den meisten modernen Excel-Versionen funktionieren, solange die Grundstruktur beibehalten wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige