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

Zelleninhalt kopieren und einfügen

Zelleninhalt kopieren und einfügen
Ingo
Hallo,
ich habe eine Excel-Tabelle, in der in der zweiten Spalte Daten stehen. Zwischen den Daten sind die Zellen ohne Inhalt. Ich möchte nun, dass die leeren Zellen mit den darüberstehenden Daten gefüllt werden.
Hier der Code, den ich verfasst habe und der nichts ausfüllt...
Sub ZellenFüllen()
Dim z, i As Variant
z = Cells(Rows.Count, 2).End(xlDown).Row
For i = z To 1 Step 1
If Cells(i, 2).Value = " " Then
Cells(i, 2).FormulaR1C1 = Cells(i + 1, 2).FormulaR1C1
End If
Next i
End Sub
Da ich VBA-Novize bin, wäre eine Erklärung des Codes sehr nett, damit ich weiß, was ich und die selben Fehler nicht nochmal mache.
Vielen Dank!
Grüße
Ingo
P.S.: Hier noch die Datei: https://www.herber.de/bbs/user/74850.xls

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Zelleninhalt kopieren und einfügen
16.05.2011 06:40:15
Mustafa
Hallo Ingo,
so vielleicht :
Sub ZellenFüllen()
Dim i As Long
Dim lngLetzte As Long
lngLetzte = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To lngLetzte
If Cells(i, 2).Value = "" Then
Cells(i, 2).FormulaR1C1 = Cells(i - 1, 2).FormulaR1C1
End If
Next i
End Sub
Rückmeldung obs Hilft wäre nett.
Gruß aus der Domstadt Köln.
AW: Zelleninhalt kopieren und einfügen
16.05.2011 06:49:42
Hajo_Zi
Hallo Ingo,
mache es mit einer Befehlszeile.
Zellen ausfüllen mit Wert davor
Range("a:a").SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"

Anzeige
AW: Zelleninhalt kopieren und einfügen
16.05.2011 07:18:20
Marc
Guten Morgen
Vielleicht mal so als erster Tip: Wenn du einen Code testen willst, dann benutz F8 um ihn schrittweise auszuführen. Wenn du dann mit der Maus auf die Variablen gehst wird dir der gerade zugewiesene Wert angezeigt.
Erklärung:
 Dim z, i As Variant 

z und i werden als Variable mit unterschiedlichem Inhalt deklariert.
z = Cells(Rows.Count, 2).End(xlDown).Row

Die Funktion dieser Anweisung kannst du selbst nachmachen: STRG+Pfeil nach unten
In diesem Fall gibt das leider keinen Sinn, denn hier springst du von der letzten Zeile noch _ weiter nach unten. Die Anweisung müßte lauten: Spring aus der letzen Zeile nach oben in die letzte benutzte Zeile, also:

z = Cells(Rows.Count, 2).End(xlUp).Row

For i = z To 1 Step 1

Hier beginnt eine Schleife, in deinem Fall von der letzten Zeile bis 1, schrittweise 1 nach vorn (?). Ich hoffe, du erkennst den Widerspruch. Es müßte also entweder von 1 bis z gehen (dann kann man auf Step 1 verzichten) oder von z nach 1, STEP -1
 If Cells(i, 2).Value = " " Then

Beginn der Wenn-Funktion. Alles was bis End If kommt, wird bedingt ausgeführt.
In Deinem Fall wird es nur ausgeführt, wenn in Spalte "B" der entsprechenden Zeile ein Leerzeichen steht. Ein Leerzeichen ist schon mehr als nix, also würde ich schreiben If Cells(i, 2).Value = "" Then oder
If isempty(Cells(i, 2) = TRUE Then um den Zellinhalt abzufragen.
Cells(i, 2).FormulaR1C1 = Cells(i + 1, 2).FormulaR1C1

FormulaR1C1 bezieht sich auf eine Formel. Da du einen Wert kopieren möchtest, nimmst du am besten .value, da das aber die Standard-Eigenschaft ist, kannst du auch drauf verzichten. Außerdem haben wir die Reihenfolgen von "nach oben" in "nach unten" geändert.
Cells(i , 2) = Cells(i-1, 2)
End If

Ende der Bedingung

Next i

Nächster Datensatz, nächste Zeile
Alles in allem sieht´s dann so aus:
Sub ZellenFüllen()
Dim z, i As Variant
z = Cells(Rows.Count, 2).End(xlUp).Row
For i = 1 To z
If Cells(i, 2).Value = "" Then
Cells(i, 2) = Cells(i - 1, 2)
End If
Next i
End Sub
Gruß, Marc
Anzeige
AW: Zelleninhalt kopieren und einfügen
16.05.2011 07:18:29
Marc
Guten Morgen
Vielleicht mal so als erster Tip: Wenn du einen Code testen willst, dann benutz F8 um ihn schrittweise auszuführen. Wenn du dann mit der Maus auf die Variablen gehst wird dir der gerade zugewiesene Wert angezeigt.
Erklärung:
 Dim z, i As Variant 

z und i werden als Variable mit unterschiedlichem Inhalt deklariert.
z = Cells(Rows.Count, 2).End(xlDown).Row

Die Funktion dieser Anweisung kannst du selbst nachmachen: STRG+Pfeil nach unten
In diesem Fall gibt das leider keinen Sinn, denn hier springst du von der letzten Zeile noch _ weiter nach unten. Die Anweisung müßte lauten: Spring aus der letzen Zeile nach oben in die letzte benutzte Zeile, also:

z = Cells(Rows.Count, 2).End(xlUp).Row

For i = z To 1 Step 1

Hier beginnt eine Schleife, in deinem Fall von der letzten Zeile bis 1, schrittweise 1 nach vorn (?). Ich hoffe, du erkennst den Widerspruch. Es müßte also entweder von 1 bis z gehen (dann kann man auf Step 1 verzichten) oder von z nach 1, STEP -1
 If Cells(i, 2).Value = " " Then

Beginn der Wenn-Funktion. Alles was bis End If kommt, wird bedingt ausgeführt.
In Deinem Fall wird es nur ausgeführt, wenn in Spalte "B" der entsprechenden Zeile ein Leerzeichen steht. Ein Leerzeichen ist schon mehr als nix, also würde ich schreiben If Cells(i, 2).Value = "" Then oder
If isempty(Cells(i, 2) = TRUE Then um den Zellinhalt abzufragen.
Cells(i, 2).FormulaR1C1 = Cells(i + 1, 2).FormulaR1C1

FormulaR1C1 bezieht sich auf eine Formel. Da du einen Wert kopieren möchtest, nimmst du am besten .value, da das aber die Standard-Eigenschaft ist, kannst du auch drauf verzichten. Außerdem haben wir die Reihenfolgen von "nach oben" in "nach unten" geändert.
Cells(i , 2) = Cells(i-1, 2)
End If

Ende der Bedingung

Next i

Nächster Datensatz, nächste Zeile
Alles in allem sieht´s dann so aus:
Sub ZellenFüllen()
Dim z, i As Variant
z = Cells(Rows.Count, 2).End(xlUp).Row
For i = 1 To z
If Cells(i, 2).Value = "" Then
Cells(i, 2) = Cells(i - 1, 2)
End If
Next i
End Sub
Gruß, Marc
Anzeige
AW: Zelleninhalt kopieren und einfügen
16.05.2011 09:45:05
Ingo
Hallo nochmal!
Vielen Dank für eure schnellen Antworten! Echt Super von Euch!
@ Hajo_Zi: Deinen Code habe ich nicht so einbinden können, dass es funktioniert. Wäre vielleicht interessant zu wissen, wie das dann aussehen müsste. Wie gesagt, ich fange gerade an, mich damit zu beschäftigen....
@ Mustafa und Marc: Eure Codes funktionieren genauso, wie ich es mir vorgestellt habe! Und besten Dank nochmal an Marc für die Erklärung! Jetzt ist die ganze Sache viel verständlicher für mich.
Zu der Zeile:
= Cells(Rows.Count, 3).End(xlUp).Row
gibt es denn auch einen Code, mit dem man nicht erst ans Ende der Spalte und dannn wieder nach oben gehen muss? Gehe ich richtig in der Annahme, dass der Befehl dann auch so funktioniert, wie Strg+Pfeil und zu letzten Zelle mit Inhalt geht?
Danke nochmal! Ihr seid spitze!
Gruß
Ingo
Anzeige
Danke für die Rückmeldung owT
16.05.2011 22:36:09
Mustafa

374 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige