Excel VBA - Nächste Leere Zelle finden?
Hallo, ich habe eine Sub geschrieben, die die nächste leere Zelle finden soll und dort etwas einfügen soll. Das ganze wird immer wieder wiederholt. Dabei habe ich allerdings ein Problem. In den Zellen A1-A10 stehen Formeln, die entweder einen Wert, oder "" ausgeben. Nehmen wir das Beispiel, dass in A1-A5 Werte stehen und A6-A10 leere Zellen sind, bzw "" (also nur eine Formel mit Ergebnis "" enthalten). Nun werden diese mit folgendem Code in das andere Tabellenblatt kopiert.
Wenn ich jetzt das ganze wiederhole, werden die neuen Daten in Tabellenblatt B erst in A11 eingefügt, obwohl A6-A10 ja leere Zellen sind.
Wie kann ich es abändern, dass Excel das Formelergebnis "" als leere Zelle ansieht?
Hier der Code:
Sub Test()
Worksheets("A").Range("A1:A10").Copy
Worksheets("B").Cells(Rows.Count, 1).End(xlUp).Offset(0, 0).PasteSpecial xlPasteValues
Application.CutCopyMode = False
End Sub
3 Antworten
Teste mal ausführlich:
Sub Test()
Dim rngZiel As Range
Dim i As Integer
Worksheets("A").Range("A1:A10").Copy
Do
Set rngZiel = Worksheets("B").Cells(Rows.Count, 1).End(xlUp).Offset(-i, 0)
If rngZiel.Address = "$A$1" Then
rngZiel.Offset(0, 0).PasteSpecial xlPasteValues
Exit Sub
End If
If rngZiel <> "" Then Exit Do
i = i + 1
Loop
rngZiel.Offset(1, 0).PasteSpecial xlPasteValues
Application.CutCopyMode = False
End Sub
Klappt es?
P.S.: Das A1 musste ich abfangen, weil er die Zelle komischerweise nicht als "" erkennt. Keine Ahnung warum.
Gibt auch vielleicht elegantere Lösungen, aber klappe sollte es. Oder?
Hallo, funktioniert einwandfrei! Vielen Dank für die umfangreiche Antwort!
Jede Zelle Einzeln kopieren und vorher den Inhalt auf "" prüfen.
Cell(Zeile,Spalte).Formula
gibt die Formel als String zurück (mit "=" als erstem Zeichen bei "echter" Formel, ansonsten den Wert, der in der Zelle steht)
Oder habe ich dich verkehrt herum verstanden?
Wenn die gefüllten Zellen zusammenhängend sind (ohne Lücke):
Wenn ich in A1 bis A3 Zahlen bzw. Formeln stehen habe und in A4 bis A10 teils überhaupt nichts, teils Formeln mit dem Ergebnis "", dann erhalte ich im Direktfenster Folgendes:
set rg = Range("A1:A10")
?rg.Rows.Count - WorksheetFunction.CountIf(rg,"")
3