Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1800to1804
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

Bereich copy paste mit Bedingung

Bereich copy paste mit Bedingung
04.01.2021 14:54:25
Mike
Hallo,
stehe vor folgendem Problem:
In der Spalte AD im ActiveSheet ab Zeile 4 stehen Formeln bis AD500.
Wenn diese auf dem aktiven Sheet greifen, stehen Zahlen in den Zellen, oder die Zelle ist "leer" (Formeln bleiben)
Nun möchte ich für alle Zeilen, in denen in AD eine Zahl steht, die Werte der Spalten AG - AW kopieren und
in Tabelle 1 Spalte E nächste freie Zeile die Werte einfügen.
danke und gruß
Mike

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bereich copy paste mit Bedingung
04.01.2021 15:22:16
worti
Hallo Mike,
zum Beispiel so:
Sub Kopieren()
Dim ws As Worksheet
Dim rngC As Range
Dim lngZielzeile As Long
Set ws = ActiveSheet
lngZielzeile = Worksheets("Tabelle1").Cells(Rows.Count, 5).End(xlUp).Row + 1
For Each rngC In Range("AD4:AD500")
a = rngC.Row
If Not rngC.Value = "" Then
ws.Range("AG" & rngC.Row).Resize(1, 16).Copy _
Destination:=Worksheets("Tabelle1").Range("E" & lngZielzeile)
lngZielzeile = lngZielzeile + 1
End If
Next rngC
Set ws = Nothing
End Sub

AW: Bereich copy paste mit Bedingung
04.01.2021 16:59:50
mike
Hallo Worti,
danke, klappt fast. Wollte aber ja nur die Werte einfügen. Daher klappte das mit Destination leider nicht.
Ein Frage zur Performance:
du hast ja eine Schleife gebaut und das dauert bei 10 Einträgen nur ein paar Sekunden.
Bei 500 und mehr kann das dauern.
Gibt es eventuell noch eine schnellere Lösung.
Hätte noch die Spalten AA bis AC als Hilfsspalten zur Verfügung.
Habe den Code entsprechend angepasst.
For Each rngC In Range("AD4:AD500")
a = rngC.Row
If Not rngC.Value = "" Then
wsq.Range("AG" & rngC.Row).Resize(1, 16).Copy
wsz.Range("E" & lngZielzeile).PasteSpecial Paste:=xlPasteValues
lngZielzeile = lngZielzeile + 1
End If
Next rngC
gruß
Mike
Anzeige
AW: Bereich copy paste mit Bedingung
04.01.2021 20:04:31
volti
Hallo Mike,
wenn Du nur die Werte übernehmen möchtest, würde ich gar nicht kopieren, sondern die Werte direkt übernehmen.
Bei den paar Zahlen bis 1000 Zeilen reicht m.E. das u.a. Makro, ansonsten mit Array arbeiten.
Code:
[Cc]

Option Explicit Sub Daten_Uebertragen() Dim WsQ As Worksheet, WsZ As Worksheet Dim rngC As Range, lngZielzeile As Long Set WsZ = Worksheets("Tabelle1") ' Anpassen!!! Set WsQ = Worksheets("Tabelle3") ' Anpassen!!! lngZielzeile = WsZ.Cells(Rows.Count, "E").End(xlUp).Row + 1 Application.ScreenUpdating = False For Each rngC In WsQ.Range("AD4:AD500") If rngC.Value <> "" Then WsZ.Range("E" & lngZielzeile).Resize(1, 16).Value = _ WsQ.Range("AG" & rngC.Row).Resize(1, 16).Value lngZielzeile = lngZielzeile + 1 End If Next rngC Application.ScreenUpdating = True End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Bereich copy paste mit Bedingung
05.01.2021 07:34:16
Mike
Moin Karl-Heinz,
klappt soweit schneller als das Kopieren.
Da ich 5 von den "Tabellen3" (SE1 bis SE5) habe, die alle identisch sind, sollte das per WSQ = active sheet eigentlich gehen.
Klappt irgendwie, kopiert auch Werte ins Ziel, jedoch meckert VBA diese Zeile
If rngC.Value "" Then
mit
Laufzeitfehler 13 Typen unverträglich an.
Aber nur bei den SE2 bis SE4, SE1 und SE5 laufen durch.
Weist du Rat?
danke und vg
Mike
AW: Bereich copy paste mit Bedingung
05.01.2021 08:51:04
volti
Hallo Mike,
da verträgt sich der Inhalt der Zelle nicht mit der Abfrageform, warum weiß ich nicht.
Da müsstest Du bitte mal schauen, was genau in der/den betroffenen Zelle(n) drin steht (Beispiel).
Lief wortis Version denn durch? Ist für mich zwar irgendwie das gleiche, aber vielleicht klappt es besser.
If Not rngC.Value = "" Then
VG KH
Anzeige
AW: Bereich copy paste mit Bedingung
05.01.2021 09:08:03
volti
Hallo Mike,
steht in den betroffenen Feldern ggf. ein Fehlerwert wie #WERT oder #BEZUG?
Dann probiere es mit
If rngC.Text "" Then
In diesem Fall werden aber auch die fehlerhaften Werte mitübertragen.
Wenn Du die fehlerhaften Daten nicht übertragen willst, versuche mal folgendes Update...
Code:
[Cc]

Option Explicit Sub Daten_Uebertragen() Dim WsQ As Worksheet, WsZ As Worksheet Dim rngC As Range, lngZielzeile As Long Set WsZ = Worksheets("Tabelle1") ' Anpassen!!! Set WsQ = Worksheets("Tabelle3") ' Anpassen!!! lngZielzeile = WsZ.Cells(Rows.Count, "E").End(xlUp).Row + 1 Application.ScreenUpdating = False For Each rngC In WsQ.Range("AD4:AD500") If Not IsError(rngC) Then If rngC.Value <> "" Then WsZ.Range("E" & lngZielzeile).Resize(1, 16).Value = _ WsQ.Range("AG" & rngC.Row).Resize(1, 16).Value lngZielzeile = lngZielzeile + 1 End If End If Next rngC Application.ScreenUpdating = True End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Bereich copy paste mit Bedingung
05.01.2021 09:17:31
Mike
Hallo Karl-Heinz,
wenn man natürlich die Formeln nicht in allen Blätter anpasst, passiert genau das.......;-)
Und ja, Wortis Code lief durch, nur das er alles kopiert hatte anstelle der reinen Werte.
Jetzt klappt es.......
Danke
Mike

106 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige