2017-02-03 4 views
1

J'ai une boucle qui met la police en gras sur chaque 10ème entrée dans une feuille Excel, mais je veux une police en gras à chaque 20ème entrée. Comment puis-je résoudre ce problème? Toute aide est grandement appréciée.VBA: Rendre chaque 20ème cellule en gras

Voici le code que je travaille avec:

'insert xxxx9 after xxxx8 if needed 
For i = 3 To counter - 1 
    If Cells(i, 1).Value Mod 10 = 8 Then 
    ' counter = counter + 1 
     If Cells(i + 1, 1) <> Cells(i, 1) + 1 Then 

      i = i + 1 
      Rows(i & ":" & i).Select 
      Selection.Insert Shift:=xlDown 

      Cells(i, 1) = Cells(i - 1, 1) + 1 
      Range("A" & 20).Select 
      Selection.Font.Bold = True 
      Cells(i, 2) = "900" 
      Range("B" & i).Select 
      Selection.Font.Bold = True 
      Cells(i, 3) = "chk" 
      Range("C" & i).Select 
      Selection.Font.Bold = True 
      Cells(i, 6) = "1" 
      Range("F" & i).Select 
      Selection.Font.Bold = True 
     Else 
      i = i + 1 
      Rows(i & ":" & i).Select 
      Range("A" & i).Select 
      Selection.Font.Bold = True 
     End If 
    End If 
Next 


'count number of entries 
counter = 2 
While (Cells(counter, 1).Value <> "" Or Cells(counter, 1).Value <> Null) 
    counter = counter + 1 
Wend 

'insert xxxx9 after xxxx8 if needed 
For i = 3 To counter - 1 
    If Cells(i, 1).Value Mod 10 = 8 Then 
    ' counter = counter + 1 
     If Cells(i + 1, 1) <> Cells(i, 1) + 1 Then 

      i = i + 1 
      Rows(i & ":" & i).Select 
      Selection.Insert Shift:=xlDown 

      Cells(i, 1) = Cells(i - 1, 1) + 1 
      Range("A" & 20).Select 
      Selection.Font.Bold = True 
      Cells(i, 2) = "900" 
      Range("B" & i).Select 
      Selection.Font.Bold = True 
      Cells(i, 3) = "chk" 
      Range("C" & i).Select 
      Selection.Font.Bold = True 
      Cells(i, 6) = "1" 
      Range("F" & i).Select 
      Selection.Font.Bold = True 
     Else 
      i = i + 1 
      Rows(i & ":" & i).Select 
      Range("A" & i).Select 
      Selection.Font.Bold = True 
     End If 
    End If 
Next 
+4

Modifiez la façon dont 'for ... next' itère comme' For i = 3 To counter - 1 Step 20'. Cela permettra d'accélérer la routine en supprimant la nécessité de vérifier que vous êtes sur la bonne rangée. – Jeeped

+0

Merci pour l'aide. Cela a fonctionné d'une certaine manière, mais il a maintenant arrêté de mettre un caractère gras sur la 20ème entrée aussi. –

+1

Je ne suis pas sûr d'avoir bien compris, mais il semble que vous sélectionniez toutes les 10 lignes pour le traitement, c'est-à-dire que vous vous attendez à ce que la première colonne contienne des nombres séquentiels, et donc 'If Cells (i, 1) .Value Mod 10 = 8' sélectionne des rangées avec des valeurs de 8, 18, 28, etc. Ceci pourrait expliquer pourquoi la suggestion de @Jeeped a provoqué l'arrêt du bolding. Je pense que vous devez mieux expliquer votre objectif afin d'obtenir une bonne assistance. – vknowles

Répondre

0

Mod 10 renvoie le reste de la division par 10. Pour obtenir la condition d'être TRUE une seule fois toutes les 20 lignes, utilisez Mod 20 à la place. Ajustez ce qu'il est égal en conséquence pour s'assurer qu'il commence à l'endroit correct.