Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1812to1816
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
Inhaltsverzeichnis

Kopieren von Zellen bei Bedingung

Kopieren von Zellen bei Bedingung
17.02.2021 16:24:38
Zellen
Hallo zusammen,
ich suche jetzt bereits seit einiger Zeit, finde aber kein VBA-Skript, welches sich an meine Bedürfnisse anpassen lässt. Folgende Problemstellung habe ich:
Sobald in Tabellenblatt 1 in Spalte B der Wert "X" auftaucht, sollen in der dazugehörigen Zeile die Zellen A, D, G, H und F der Zelle in das Tabellenblatt 2 kopiert ab Zeile 5 kopiert werden. Es können in Tabellenblatt 1 in der Spalte B mehrere Zeilen mit X vorkommen und die Tabellenblätter werden stetig erweitert. In Tabellenblatt 2 sollen die Informationen immer in die nächste freie Zeile kopiert werden.
Ich hoffe ich konnte mein Problem gut darstellen. Vielen Dank im voraus!!

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kopieren von Zellen bei Bedingung
17.02.2021 16:45:18
Zellen
Hallo,
warum nicht Spalte B nach X filtern und vom Filterergebnis die Daten kopieren. Das kannst du dir mit dem Makrorekorder aufzeichnen.
Ansonsten mal bitte eine Beispielmappe hier hochladen.
Dir ist schon klar, dass du (ausgehend von deiner Beschreibung) dir dann bei erneutem Ausführen des Makros auch Daten ins zweite Blatt kopierst, die schon mal dorthin kopiert wurden?
Gruß Werner
AW: Kopieren von Zellen bei Bedingung
17.02.2021 17:07:39
Zellen
Hallo
so ?

Option Explicit
Sub SpalteB()
Dim TB1 As Worksheet, TB2 As Worksheet
Dim ZNeu As Integer, Sp1 As Integer, SpSuch As Integer
Dim LR1 As Long, Z As Long
Dim Suchwort As String
Set TB1 = Sheets("Tabelle1")
Set TB2 = Sheets("Tabelle2")
Sp1 = 1 'Spalte A
SpSuch = 2 'Spalte B
ZNeu = 5 ' ab Zeile 5
Suchwort = "X"
With TB1
LR1 = .Cells(.Rows.Count, SpSuch).End(xlUp).Row 'letzte Zeile der Spalte
For Z = 1 To LR1
If .Cells(Z, SpSuch) = Suchwort Then
ZNeu = WorksheetFunction.Max(ZNeu, TB2.Cells(TB2.Rows.Count, Sp1).End(xlUp).Row  _
+ 1)
TB2.Cells(ZNeu, 1).Value = .Cells(Z, 1).Value
TB2.Cells(ZNeu, 2).Value = .Cells(Z, 4).Value
TB2.Cells(ZNeu, 3).Value = .Cells(Z, 7).Value
TB2.Cells(ZNeu, 4).Value = .Cells(Z, 8).Value
TB2.Cells(ZNeu, 5).Value = .Cells(Z, 6).Value
End If
Next
End With
End Sub

LG UweD
Anzeige
AW: Kopieren von Zellen bei Bedingung
18.02.2021 09:02:24
Zellen
Hallo,
erstmal vielen Dank für die schnelle Antwort!
@Werner: Nein - leider war mir das nicht klar, macht aber Sinn. Gibt es eine Möglichkeit, dass geprüft wird, ob die Einträge bereits vorhanden sind?
@UweD: Danke für das Skript, leider macht es genau das von Werner prophezeite und kopiert die Daten dann ggf. doppelt.
Ich habe mal eine Beispieldatei hochgeladen, die eigentlich genau das macht, was ich möchte. Leider kriege ich diese nicht auf meine Zellen angepasst. Dort kann ich durch ein "X" in Tabelle1 Spalte C die Daten in Tabelle2 übertragen. Lösche ich das X, werden dementsprechend auch die Daten in Tabelle2 gelöscht.
https://www.herber.de/bbs/user/144029.xls
Viele Grüße
Dominic
Anzeige
AW: Kopieren von Zellen bei Bedingung
18.02.2021 10:10:33
Zellen
Hallo,
das würde ich alles nur über das Doppelklick-Event regeln.
Doppelklick - X wird gesetzt - Datensatz wird in Tabelle3 kopiert - Tabelle3 wird sortiert
Doppelklick bei bereits gesetztem X - X wird entfernt - Datensatz wird in Tabelle3 entfernt - Tabelle3 wird sortiert.
So dürftest du dann auch nie doppelte in Tabelle3 haben.
Das funktioniert aber nur so, so lange du in Tabelle1 keine doppelt vorkommenden Namen hast.
Also mal dein Change Makro löschen und testen.
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim raFund As Range
If Target.Column = 3 And Target.Row > 6 Then
Application.ScreenUpdating = False
Cancel = True
Target = IIf(Target = "", "X", "")
If Target = "X" Then
Union(Target.Offset(, -1), Target.Offset(, 1).Resize(1, 5)).Copy
With Tabelle3
.Cells(.Cells(.Rows.Count, "B").End(xlUp).Offset(1).Row, "B").PasteSpecial _
Paste:=xlPasteValuesAndNumberFormats
.Range("B6:G" & .Rows.Count).Sort Key1:=.Range("B6"), Order1:=xlAscending, _
Header:=xlYes
Application.CutCopyMode = False
End With
Else
Set raFund = Tabelle3.Columns("B").Find(what:=Target.Offset(, -1), _
LookIn:=xlValues, lookat:=xlWhole)
If Not raFund Is Nothing Then
With Tabelle3
.Rows(raFund.Row).ClearContents
.Range("B6:G" & .Rows.Count).Sort Key1:=.Range("B6"), Order1:=xlAscending, _
Header:=xlYes
End With
End If
End If
End If
Set raFund = Nothing
End Sub
Gruß Werner
Anzeige
AW: Kopieren von Zellen bei Bedingung
18.02.2021 13:30:47
Zellen
Hallo Werner,
vielen Dank für deine extrem schnelle Hilfe!! Das mit dem Doppelklick-Event und dem anschließenden Kopieren in das andere Tabellenblatt klappt hervorragend!
Wenn ich das "X" durch einen Doppelklick wieder entferne, bleiben die kopierten Einträge jedoch im neuen Tabellenblatt bestehen.
Gibt es zudem die Möglichkeit nicht die Range anzugeben "B6:G" sondern einzelne Zellen innerhalb der Zeile?
Vielen Dank im Voraus!
Dominic
AW: Kopieren von Zellen bei Bedingung
18.02.2021 13:39:18
Zellen
Hallo,
du gibst als Excel-Version 2016 an, weshalb schickst du dann die Beispielmappe als .xls ?
Bei mir und mit deiner Beispielmappe bleibt da nix im zweiten Blatt wenn das x wieder entfernt wird.
Siehe deine Mappe.
Gibt es zudem die Möglichkeit nicht die Range anzugeben "B6:G" sondern einzelne Zellen innerhalb der Zeile?
Keine Ahnung was du damit meinst/willst.
https://www.herber.de/bbs/user/144041.xlsm
Gruß Werner
Anzeige
AW: Kopieren von Zellen bei Bedingung
18.02.2021 13:50:37
Zellen
Hi,
die gesendete Datei war lediglich als Beispiel gedacht, um das gewünschte Funktionsprinzip zu verdeutlichen. Ich habe diese ebenfalls einfach heruntergeladen.
Bzgl. meiner zweiten Frage: Momentan ist es so, dass bei einem Doppelklick das "X" erscheint und dann automatisch innerhalb der Zeile bspw. die Spalten B10 bis G10 in das neue Tabellenblatt verschoben werden. Gibt es die Möglichkeit, dass innerhalb der Zeile bspw. nur Zelle B10, B13, B15 etc. kopiert werden?
Viele Grüße
AW: Kopieren von Zellen bei Bedingung
18.02.2021 13:57:00
Zellen
Hallo,
dann mach mal eine Beispielmappe, die im Aufbau dem Original entspricht - was ja wohl offensichtlich bisher nicht der Fall war.
In der Beispielmappe dann mal anhand ein paar Beispieldaten darstellen was du willst. Die dann hier hochladen.
Ich habe keine Lust, den Code noch ein paar mal nachzubessern.
Gruß Werner
Anzeige
AW: Kopieren von Zellen bei Bedingung
18.02.2021 14:13:58
Zellen
Hallo,
habe mal eine Beispieldatei aufgebaut.
https://www.herber.de/bbs/user/144043.xlsm
Wenn in Tabellenblatt "Pot. Customer" in Spalte B ein "X" erscheint, sollen die Spalten folgendermaßen in das Tabellenblatt "Prospects" kopiert werden:
Pot. Customers nach Prospects
-----------------------------
A nach A
F nach B
G nach C
H nach D
I nach AI
Viele Grüße
Dominic
AW: Kopieren von Zellen bei Bedingung
18.02.2021 15:19:43
Zellen
Hallo,
und die Tabelle hat jetzt bitte was mit der ursprünglich hochgeladenen Datei zu tun? Richtig nichts.
Ich verstehe nicht, dass nicht verstanden wird wozu eine Beispielmappe nötig ist.
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim raFund As Range, loLetzte As Long
If Target.Column = 2 And Target.Row > 4 Then
Application.ScreenUpdating = False
Cancel = True
Target = IIf(Target = "", "X", "")
If Target = "X" Then
With Worksheets("Prospects")
loLetzte = .Columns("A").Find(what:="*", LookIn:=xlValues, lookat:=xlWhole, _
searchdirection:=xlPrevious).Offset(1).Row
Union(Target.Offset(, -1), Target.Offset(, 4).Resize(1, 3)).Copy
.Cells(loLetzte, "A").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Target.Offset(, 7).Copy
.Cells(loLetzte, "AI").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
.Range("A4:AJ" & loLetzte).Sort Key1:=.Range("A4"), Order1:=xlAscending, _
Header:=xlYes
Application.CutCopyMode = False
End With
Else
Set raFund = Worksheets("Prospects").Columns("A").Find(what:=Target.Offset(, -1), _
LookIn:=xlValues, lookat:=xlWhole)
If Not raFund Is Nothing Then
With Worksheets("Prospects")
loLetzte = .Columns("A").Find(what:="*", LookIn:=xlValues, lookat:=xlWhole, _
searchdirection:=xlPrevious).Row
.Rows(raFund.Row).ClearContents
.Range("A4:AJ" & loLetzte).Sort Key1:=.Range("A4"), Order1:=xlAscending, _
Header:=xlYes
End With
End If
End If
End If
Set raFund = Nothing
End Sub
Gruß Werner
Anzeige
AW: Kopieren von Zellen bei Bedingung
19.02.2021 09:52:02
Zellen
Hallo Werner,
da hast vollkommen recht - werde es bei meinem nächsten Post berücksichtigen. Ich danke Dir sehr für deine Hilfe und für deine Zeit, es funktioniert perfekt!!
Viele Grüße
Gerne u. Danke für die Rückmeldung. o.w.T.
19.02.2021 09:56:58
Werner

290 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige