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

Forumthread: Nur bestimmte werte kopieren

Nur bestimmte werte kopieren
23.11.2022 13:33:41
David
Hallo Excelfreunde,
ich benötige eine Makro, die alle Werte 0 aus der Spalte BF kopiert , alle ''0'' Werte aus der Spalte BF überspringt und die aus der Spalte BF kopierte Werte in der Spalte AF einfügt.
Der erste Wert nach dem Überschriften befindet sich in der Zelle BF6.
Ich habe es selber versucht aber leider ohne Erfolg.
Kann mir bitte jemand helfen?
Danke im Voraus.
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nur bestimmte werte kopieren
23.11.2022 14:03:39
Yal
Hallo David,
Wenn nur Wert (und nicht Formeln) kopiert werden sollen, dann so:

Sub Kopieren()
Dim Z As Range 'Z wie Zelle
Application.ScreenUpdating = False
Applicaiton.EnableEvents = False
With Worksheets("xyz")
For Each Z In Range(.Range("BF1"), .Cells(Rows.Count, "BF").End(xlUp)).Cells
If Z.Value  0 Then Z.Offset(0, -1) = Z.Value
Next
End With
Applicaiton.EnableEvents = True
Application.ScreenUpdating = True
End Sub
VG
Yal
Anzeige
AW: Nur bestimmte werte kopieren
23.11.2022 14:47:04
David
Hallo Yal,
ich habe es versucht aber es hat leider nicht funktioniert :(.
Ich bekomme diesen Fehler :
"Lauzeitsfehler 424"
Objekt erforderich
VG
AW: Nur bestimmte werte kopieren
23.11.2022 15:49:34
Yal
Hallo David,
diese Fehler kommt nicht einfach so, sondern auf eine bestimmten Zeile. Diese bestimmte Zeile ist wahrscheinlich sehr ähnlich wie eine andere Zeile, die nicht angemekert worden ist. Dann kann man die beiden "vergleichen". Und vielleicht entdecken, dass in eine "Application" steht und in die andere "Applicaiton".
Wir können ein Fahrrad zur Verfügung stellen, aber für das Ausbalancieren musst Du selber sorgen. Denn niemand wird neben Dir mitlaufen ;-)
VG
Yal
Anzeige
AW: Nur bestimmte werte kopieren
23.11.2022 14:10:55
GerdL
Hallo David,
eine weitere Variante zum Testen.

Sub Unit()
Dim C As Range, R As Range
For Each C In Range(Cells(6, 58), Cells(Rows.Count, 58).End(xlUp)).Cells
If IsNumeric(C.Text) Then
If C  0 Then
If R Is Nothing Then
Set R = C
Else
Set R = Union(R, C)
End If
End If
End If
Next C
If Not R Is Nothing Then
For Each C In R.Areas
Call C.Copy
Call C.Offset(, -26).PasteSpecial(Paste:=pastexlvalues)
Application.CutCopyMode = False
Next
Set R = Nothing
End If
End Sub
Gruß Gerd
Anzeige
AW: Nur bestimmte werte kopieren
23.11.2022 14:52:14
David
Hallo Gerd,
es hat leider nicht funktioniert :(
ich habe diesen Fehler bekommen:
Fehler beim Kompilieren
Variable nicht definiert
VG David
AW: Nur bestimmte werte kopieren
23.11.2022 15:29:24
GerdL
Hallo David,
ändere
Call C.Offset(, -26).PasteSpecial(Paste:=xlPasteValues)
Gruß Gerd
AW: Nur bestimmte werte kopieren
23.11.2022 15:57:02
David
Hallo Gerd,
es hat nun funktioniert.
Ich hätte noch bitte eine kleine Frage und zwar, was müsste ich in dem Code ändern, um die Werte in der Spalte AH anstatt AF zu kopieren?
Danke schon mal
Grüß David
Anzeige
AW: Nur bestimmte werte kopieren
23.11.2022 16:03:49
GerdL
Hallo David,
nimm beim Offset dann statt -26 nur -24
Gruß Gerd
AW: Nur bestimmte werte kopieren
23.11.2022 16:12:20
David
Hallo Gerd,
genau das habe ich getan. Danke für die schnelle Rückmeldung und die Hilfe.
Gruß David
AW: Nur bestimmte werte kopieren
23.11.2022 16:08:09
David
Ich habe das mit Spalte ändern selber gelöst. Nochmal Vielen Dank!!!
Gruß David
Anzeige
AW: Nur bestimmte werte kopieren
23.11.2022 15:13:56
Daniel
Hi
ich würde erstmal alles kopieren und dann die 0-Werte löschen:

Range("BF:BF").Copy
Range("AF1").PasteSpecial xlpastevalues
With Range("AF:AF")
.Replace "0", True, xlwhole
if Worksheetfunction.Countif(.cells, True) > 0 Then  .SpecialCells(xlcelltypeconstants, 4).Delete shift:=xlup
end with
wenn die 0-Werte nur gelöscht werden sollen ohne das die anderen Werte nach oben rutschen, dann ersetze das .Delete Shift:=xlup durch .ClearContents
Gruß Daniel
Anzeige
AW: Nur bestimmte werte kopieren
23.11.2022 15:33:24
Daniel
bzw, wenn die Zellen, die nicht 0 enthalten die Zeile behalten und nicht nach oben rutschen sollen, dann reicht:

Range("BF:BF").Copy
Range("AF1").PasteSpecial xlpastevalues
Range("AF:AF").Replace "0", "", xlwhole
Gruß Daniel
AW: Nur bestimmte werte kopieren
23.11.2022 15:21:47
Daniel
als reine VBA-Lösung so

dim arr1, arr2
dim z1 as long, z2 as long
arr1 = Range("BF6:BF" & cells(rows.count, "BF").End(xlup).row).value
redim arr2(1 to ubound(arr1, 1), 1 to 1)
for z1 = 1 to ubound(arr1, 1)
if arr1(z1, 1)  0 then
z2 = z2 + 1
arr2(z2, 1) = arr1(z1, 1)
end if
next
Range("AF6").Resize(ubound(arr2, 1), 1) = arr2
Gruß Daniel
Anzeige
AW: Nur bestimmte werte kopieren
23.11.2022 15:46:39
David
Hallo Daniel,
die Makro funktioniert zwar aber macht leider noch nicht ganz, was ich möchte. Ich möchte, dass die kopierte Werte aus der Spalte BF nur in den dazugehörigen Zellen in der Spalte AF kopiert werden. ( BF6 in AF6, BF18 in AF18, BF1001 in AF1001 usw. )
ginge es auch?
Danke im Voraus
Anzeige
AW: Nur bestimmte werte kopieren
23.11.2022 16:08:33
Daniel
Hi
wenn die Zellen mit 0 im Ziel leer bleiben sollen, kannst du hier einfach folgendes verwenden:

 arr2(z1, 1) = arr1(z1, 1)
also mach aus dem z2 ein z1, dann werden die Daten im Zielarray in die gleiche Zeile geschrieben wie im Quellarray,
das z2 = z2 + 1 kannst du dann auch weglassen
Gruß
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Nur bestimmte Werte kopieren in Excel


Schritt-für-Schritt-Anleitung

Um nur bestimmte Werte in Excel zu kopieren, kannst Du ein VBA-Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne die Excel-Datei, in der Du die Werte kopieren möchtest.

  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Klicke auf Einfügen und wähle Modul.

  4. Füge den folgenden Code in das Modul ein:

    Sub Kopieren()
       Dim Z As Range 'Z wie Zelle
       Application.ScreenUpdating = False
       Application.EnableEvents = False
       With Worksheets("xyz")
           For Each Z In Range(.Range("BF1"), .Cells(Rows.Count, "BF").End(xlUp)).Cells
               If Z.Value <> 0 Then Z.Offset(0, -1) = Z.Value
           Next
       End With
       Application.EnableEvents = True
       Application.ScreenUpdating = True
    End Sub
  5. Schließe den VBA-Editor und kehre zu Excel zurück.

  6. Um das Makro auszuführen, drücke ALT + F8, wähle Kopieren und klicke auf Ausführen.

Das Makro kopiert alle Werte aus der Spalte BF in die Spalte AF, überspringt jedoch die Zellen mit dem Wert 0.


Häufige Fehler und Lösungen

  • Laufzeitfehler 424: Objekt erforderlich
    Dieser Fehler kann auftreten, wenn Du einen Schreibfehler im Code hast. Überprüfe, ob Application korrekt geschrieben ist (nicht Applicaiton).

  • Fehler beim Kompilieren: Variable nicht definiert
    Stelle sicher, dass alle Variablen korrekt deklariert sind. Zum Beispiel kann der Fehler durch fehlende oder falsche Deklarationen von Variablen wie R oder C verursacht werden.


Alternative Methoden

Wenn Du keine VBA-Lösungen verwenden möchtest, kannst Du auch die folgenden Methoden ausprobieren:

  1. Manuelles Kopieren und Einfügen: Kopiere die gesamte Spalte BF und füge sie in die Spalte AF ein. Anschließend kannst Du die 0-Werte manuell löschen.

    Range("BF:BF").Copy
    Range("AF1").PasteSpecial xlPasteValues
    Range("AF:AF").Replace "0", "", xlWhole
  2. Filterfunktion: Du kannst die Filterfunktion in Excel verwenden, um nur die gewünschten Werte anzuzeigen und diese dann zu kopieren.


Praktische Beispiele

  1. Kopieren von Werten mit VBA:

    Sub Unit()
       Dim C As Range, R As Range
       For Each C In Range(Cells(6, 58), Cells(Rows.Count, 58).End(xlUp)).Cells
           If IsNumeric(C.Text) Then
               If C.Value <> 0 Then
                   If R Is Nothing Then
                       Set R = C
                   Else
                       Set R = Union(R, C)
                   End If
               End If
           End If
       Next C
       If Not R Is Nothing Then
           For Each C In R.Areas
               Call C.Copy
               Call C.Offset(, -26).PasteSpecial Paste:=xlPasteValues
               Application.CutCopyMode = False
           Next
           Set R = Nothing
       End If
    End Sub
  2. Kopieren und Ersetzen:

    Range("BF:BF").Copy
    Range("AF1").PasteSpecial xlPasteValues
    With Range("AF:AF")
       .Replace "0", "", xlWhole
    End With

Tipps für Profis

  • Verwende die Offset-Methode, um gezielt Zellen relativ zu einer bestimmten Zelle zu adressieren.
  • Nutze die Union-Methode, um mehrere Zellen in einer einzigen Operation zu kopieren.
  • Denke daran, die Application.ScreenUpdating- und Application.EnableEvents-Eigenschaften zu deaktivieren, um die Ausführungsgeschwindigkeit des Makros zu erhöhen.

FAQ: Häufige Fragen

1. Wie kann ich nur bestimmte Werte aus einer Zelle übernehmen?
Du kannst die IF-Bedingung im VBA-Code anpassen, um spezifische Werte zu kopieren.

2. Wie kann ich den Zielbereich ändern?
Ändere den Offset-Wert im Code, um die kopierten Werte in eine andere Spalte zu verschieben. Zum Beispiel, um in die Spalte AH zu kopieren, ändere -26 auf -24.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige