2017-08-14 2 views
1

Ich versuche, VBA zu verwenden, um automatisch (1, 2, 3, ....) in Spalte "A" zu füllen, während Zeilen, die nicht leer sind, übersprungen werden . Zum Beispiel, wenn es Text/Daten in "A3" und "A5" ist, würde zählt der Code wie folgt:Zähle in numerischer Reihenfolge nur in leeren (leeren) Zellen

"A1" = 1    "B1" = text/data 
"A2" = 2    "B2" = text/data 
"A3" = text/data  "B3" = text/data 
"A4" = 3    "B4" = text/data 
"A5" = text/data  "B5" = text/data 
"A6" = 4    "B6" = text/data 
"A7" = 5    "B7" = text/data 

... und so weiter

Bisher habe ich nur in der Lage gewesen, um die Zeilen mit dem zuvor eingegebenen Text zu überspringen, aber diese Zählung wird fortgesetzt, als ob keine Zellen übersprungen würden.

Bitte beachten Sie: Ich benutze .End(xlDown).Count in Spalte "B", um zu definieren, wie weit der Zähler gehen soll.

Dies ist, was ich

Sub Counter() 

Dim NoF As Long 
Dim Test As Long 

NoF = Range("B1", Range("B1").End(xlDown)).Count 

For i = 1 To NoF 

    If Cells(i, 1) = "" Then 
     ActiveSheet.Cells(i, 1).Value = i 
    ElseIf Cells(i, 1) <> "" Then 
     ActiveSheet.Cells(i, 1).Offset(i + 1, 1).Select 
    End If 

Next i 

End Sub 

Antwort

0

Sie könnten eine zweite Variable verwenden, so weit haben, die die Zeilen mit Text zählt. Initialisiere es außerhalb der for-Schleife auf Null und füge 1 hinzu, wenn es Text gibt. Als nächstes müssen Sie es nur von i subtrahieren.

j = 0 
For i = 1 To NoF 

    If Cells(i, 1) = "" Then 
     ActiveSheet.Cells(i, 1).Value = i - j 
    ElseIf Cells(i, 1) <> "" Then 
     ActiveSheet.Cells(i, 1).Offset(i + 1, 1).Select 
     j = j + 1 
    End If 

Next i 

Sie brauchen nicht zu Offset, das funktioniert auch

Option Explicit 

Sub Counter() 

Dim NoF As Long 
Dim j As Long 
Dim i As Long 

NoF = Range("B1", Range("B1").End(xlDown)).Count 
j = 0 

For i = 1 To NoF 

    If Cells(i, 1) = "" Then 
     Cells(i, 1).Value = i - j 
    Else 
     j = j + 1 
    End If 

Next i 

End Sub 
+0

Hallo @ Capema00 wenn diese oder eine Antwort Ihre Frage gelöst beachten Sie bitte [sie zu akzeptieren] (https: // meta.stackexchange.com/q/5234/179419), indem Sie auf das Häkchen klicken. Dies zeigt der breiteren Gemeinschaft, dass Sie eine Lösung gefunden haben und sowohl dem Antworter als auch Ihnen einen guten Ruf verschaffen. Es besteht keine Verpflichtung, dies zu tun. Das Gleiche gilt für Upvoting. – PalimPalim

Verwandte Themen