2014-07-16 5 views
0

Je suis assez nouveau à VBA et j'ai quelques obstacles généraux avec la syntaxe de base. J'utilise le code ci-dessous pour découper les espaces de début et le code couleur d'une ActiveSheet sur laquelle je travaille actuellement.Référencement de plusieurs feuilles avec de grands ensembles de données

J'ai une autre feuille de travail appelée "Pays" que je voudrais appliquer la même logique à la feuille que j'utilise. J'ai également des difficultés à utiliser le code le plus efficace pour trouver des cellules avec des valeurs de "AcctTotal", "CurrTotal" et "BravoTotal" (il y a environ 14 000 lignes de données). Je suis actuellement en train de mettre en évidence toute la feuille de calcul et en utilisant "UsedRange" pour trouver ces cellules.

Pour résumer: je voudrais couper les espaces en tête et le code couleur des valeurs de « AcctTotal », « CurrTotal » et « BravoTotal » dans deux feuilles de travail: « Monnaie » et « Pays »

Sous ColorCodeCurrency()

Dim r As Range 
For Each r In Selection 
    If r.Value = " AcctTotal" Then 
     r.Value = LTrim(r.Value) 
     Intersect(r.EntireRow, ActiveSheet.UsedRange).Interior.ColorIndex = 15 
    End If 
Next r 

Dim s As Range 
For Each s In Selection 
    If s.Value = " CurrTotal" Then 
     s.Value = LTrim(s.Value) 
     Intersect(s.EntireRow, ActiveSheet.UsedRange).Interior.ColorIndex = 40 
    End If 
Next s 

Dim t As Range 
For Each t In Selection 
    If t.Value = " BravoTotal" Then 
     t.Value = LTrim(t.Value) 
     Intersect(t.EntireRow, ActiveSheet.UsedRange).Interior.ColorIndex = 35 
    End If 
Next t 

End Sub

Répondre

0

la plupart du problème est que vous faites la même chose trois fois. L'instruction "Pour chaque" passe trois fois dans chaque cellule. Si vous avez rejoint dans

for each r in selection 
if r.value ="AcctTotal" then 
'do something 
elseif r.value = "CurrTotal" then 
'do something else 
elseif r.value = "BravoTotal" then 
'do the third thing 
end if 
+0

Je suis d'accord que c'est un problème et je vais résoudre ce problème, mais comment puis-je faire référence à la feuille de calcul "Pays"? A partir de maintenant, il applique uniquement le code à la feuille de calcul active – user3746034

0

En plus de ce que dit Maudise, lorsque vous faites référence à vos données, vous pouvez utiliser la syntaxe comme:

Sheets("Country").Range("A1:E14000") 

S'il est possible de modifier vos données source, Vous trouverez peut-être utile de le formater sous forme de tableau pour faciliter la consultation. Utilisez le gestionnaire de noms pour donner un nom utile à la table. Ensuite, vous pouvez dire quelque chose comme:

For Each r In Sheets("Country").Range("CountryTable") 
+0

Je ne recevrai pas toujours 14000 lignes, parfois plus. Que puis-je utiliser pour capturer au mieux toutes les données? – user3746034

+0

Comme je l'ai mentionné, je pense que l'utilisation d'une table est le moyen le plus facile de le faire. Mais, si une table n'est pas une option, vous pouvez utiliser ce que suggère IolandaAB pour trouver la dernière ligne et la colonne la plus à droite. – Liza

0

Vous pouvez essayer cette façon:

Public Sub ColorCode() 

Dim i As Integer, j As Integer, m As Integer, n As Integer 

i = Range("A:A").End(xlDown).Row 
j = Cells.End(xlToRight).Column 

For m = 1 To i 
    For n = 1 To j 
     If Cells(m, n).Value < 50 Then 
      Cells(m, n).Interior.ColorIndex = 13 
     End If 
    Next n 
Next m 
End Sub 

Une solution est d'appeler ce code placé dans un module dans "Ce classeur" dans « Private Sub Workbook_Open () ".

Questions connexes