VB Skript in Excel - Zeilen/Inhalt löschen, sobald Bedingung erfüllt

Moe.Joe

Lt. Junior Grade
Registriert
Dez. 2011
Beiträge
265
Hallo zusammen,

ich will ein kleines VBSkript schreiben, nach etwas googeln habe ich auch die entsprechenden commands gefunden.
Allerdings wollen diese im Zusammenspiel nicht funktionieren.
Ich will folgendes erreichen, sobald in der ersten Spalte nichts steht oder "##" dann soll die komplette Zeile gelöscht werden.
Wenn in der ersten Spalte nur ein "#", dann soll nur der Zelleninhalt gelöscht werden.
Hier mal mein Code, der aber so nicht funktioniert :-(
Code:
[Sub nvloeschen()
    Dim i As Long
    Application.ScreenUpdating = False
    For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
        If Cells(i, 1) = "#" Then Cells(i, 1).ClearContents
        If Cells(t, 1).Value = "" Then Rows(t).Delete Shift:=xlUp
        If Cells(t, 1).Value = "##" Then Rows(t).Delete Shift:=xlUp
    Next i
    Application.ScreenUpdating = True
End Sub

Könntet ihr mich hier unterstützen?
Danke euch:-))

Viele Grüße
moejoe
 
If Cells(i, 1) = "#" Then Cells(i, 1).ClearContents
If Cells(t, 1).Value = "" Then Rows(t).Delete Shift:=xlUp
If Cells(t, 1).Value = "##" Then Rows(t).Delete Shift:=xlUp
 
Tipp:
Im VBA Editor: Extras -> Optionen -> Variablendeklaration erforderlich
oder
Option Explicit oberhalb der ersten Prozedur oder Funktion schreiben, dann kann dir soetwas nicht passieren.
 
okay danke, hatte ich übersehen :-)
Jetzt will ich noch, dass die komplette erste Spalte um eins nach oben geschoben wird. Dann wäre alles perfekt.
Wie lässt sich das realisieren?
Danke euch :-)
Ergänzung ()

Hey,
könntet ihr mich nochmals unterstützen :-)
Ich will jetzt noch, dass sobald eine Raute kommt, der Inhalt mit der Zeile darunter getauscht wird anstatt den Zelleninhalt zu löschen. Dann wäre das Endergebnis perfekt. :-)

Code:
Sub nvloeschen()
    Dim i As Long
    Application.ScreenUpdating = False
    For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
        If Cells(i, 1) = "#" Then
            Cells(i, 1).Value = Cells(i + 1, 1).Value
            Cells(i + 1, 1).Value = "#"
        If Cells(i, 1).Value = "" Then
            Rows(i).Delete Shift:=xlUp
        If Cells(i, 1).Value = "##" Then
            Rows(i).Delete Shift:=xlUp
    Next i
    Application.ScreenUpdating = True
End Sub

allerdings sagt er, dass ein "Next ohne For" vorkommt. :-(

Viele Grüße
moe.joe
 
Moin,

ist zwar schon älter aber deine Frage besteht wohl noch.

VBA ist sehr eigen, was so einiges angeht...zum Beispiel braucht eine if-Anweisung kein end, wenn man sie in einer Zeile schreibt, sobald man sie aber über mehrere Zeilen verteilt benötigt man ein end if.
Bsp:
Code:
if a > b then c
aber
Code:
if a > b then
  c
endif

Weiter benötigt man beim Tauschen eine Zwischenvariable.
Code:
Sub asd()
  Dim t
  t = Rows(1).Value
  Rows(1).Value = Rows(2).Value
  Rows(2).Value = t
End Sub
Bei t habe ich in diesem Fall keinen Datentypen gewählt, weil Excel dann automatisch einen Variant nimmt. Auf Speichereffizienz können wir hier wohl verzichten. In diesen Variant (soviel wie: "Mir egal was da rein kommt") speichert VBA dann einen Array aus den Werten einer ganzen Zeile. Das könnte man natürlich auch explizit angeben, aber dazu habe ich jetzt keine Lust ;)
 
Zurück
Oben