Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
616to620
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
616to620
616to620
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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
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
Anzeige
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
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
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
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

206 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige