2017-08-14 3 views
1

J'essaie d'utiliser VBA pour remplir automatiquement (1, 2, 3, ....) dans la colonne "A" en ignorant les lignes qui ne sont pas vides/vides . Par exemple, s'il y a du texte/données « A3 » et « A5 », le code compterait comme suit:Comptage par ordre numérique uniquement dans les cellules vides (vides)

"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 

... et ainsi de suite

Jusqu'à présent, je n'ai pu pour ignorer les lignes avec du texte saisi précédemment, mais ce nombre continue comme s'il ne sautait pas de cellules.

Veuillez noter: J'utilise .End(xlDown).Count dans la colonne "B" pour définir à quelle distance le compteur devrait aller.

C'est ce que j'ai jusqu'à présent

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 

Répondre

0

Vous pouvez utiliser une seconde variable qui compte les lignes avec du texte. Initialisez-le en dehors de la boucle for à zéro et ajoutez 1 s'il y avait du texte. Ensuite, vous avez juste besoin de le soustraire de i.

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 

Vous n'êtes pas obligé de Offset, cela fonctionne aussi bien

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

Salut @ Capema00 si cela ou d'une réponse a résolu votre question s'il vous plaît envisager [accepter] (https: // meta.stackexchange.com/q/5234/179419) en cliquant sur la coche. Ceci indique à la communauté plus large que vous avez trouvé une solution et donne une certaine réputation à la fois le répondeur et vous-même. Il n'y a aucune obligation de le faire. La même chose vaut pour l'upvoting. – PalimPalim