redéfinir un entier vba
-
20-12-2019 - |
Question
J'ai du mal à résoudre le problème suivant auquel je suis confronté :
Disons que j'ai ce code
i_GroupNumberA = Application.WorksheetFunction.CountIf(Sheets("SheetX").Range("G2:G500"), "Red")
i_GroupNumberB = Application.WorksheetFunction.CountIf(Sheets("SheetX").Range("G2:G500"), "Green")
For i = 2 To LastRow
For j = 2 To LastCol
groupNumber = Sheets("Sheet1").Cells(i, j).Value
i_GroupNumberA = 35 'this number a integer that I have got from a cells.value
i_GroupNumberB = 39
If groupNumber = Sheets("Sheet1").Cells(i, j).Value Then
i_Variable = "i_" + groupNumber + "AlphabeticLetter"
MsgBox i_Variable
End If
Next j
Next i
En conséquence, j'obtiens i_Variable sous forme de chaîne dans une boîte de message comme résultat :
i_groupNumberA
Je veux avoir le résultat suivant :
35
Ce que je demande, c'est comment puis-je obtenir une nouvelle variable d'une chaîne fonctionnant comme un entier.
Je ne sais pas si je pose cette question, n'est-ce pas ?
J'ai fait ce que @engineersmnky a dit, mais aucun effet.J'ai vérifié les sites et effectué quelques ajustements avec votre code.Mais je ne parviens toujours pas à obtenir le numéro nécessaire en retour.Jusqu'à présent, j'ai eu ceci :
Dim Group As New Collection
i_GroupNumberA = Application.WorksheetFunction.CountIf(Sheets("SheetX").Range("G2:G500"), "Red") 'lets assume it is an number 35
i_GroupNumberB = Application.WorksheetFunction.CountIf(Sheets("SheetX").Range("G2:G500"), "Green") 'lets assume it is an number 39
Group.Add i_GroupNumberA
Group.Add i_GroupNumberB
For i = 2 To LastRow
For j = 2 To LastCol
groupNumber = Sheets("Sheet1").Cells(i, j).Value
i_Variable = "i_" + groupNumber + "AlphabeticLetter"
Group(i_Variable)
Next j
Next i
Groupe (i_variable) Je n'arrive pas à comprendre ?pour une raison quelconque, cela ne fonctionne pas.
La solution
Puisque vous ne pouvez pas obtenir une valeur variable à partir d'une chaîne dans vba
Je suggérerais de créer un Collection
Objet ou un Dictionary
si tu as besoin de quelque chose de plus diversifié
dim groups AS New Collection
'Value, Key
groups.Add 35, "i_GroupNumberA"
groups.Add 39, "i_GroupNumberB"
Ensuite, dans votre boucle, au lieu de la boîte de message, vous pouvez utiliser
groups(i_Variable)
Cela renverra 35 pour "i_GroupNumberA"
Mise à jour Les collections utilisent une structure Item et Key pour Collection(Key)
pour renvoyer la valeur souhaitée, vous devez spécifier le key
Vous devrez peut-être créer une collection de manière dynamique avec les numéros de groupe dont vous avez besoin, car je ne suis pas sûr de ce que c'est, par exemple.
Function buildCollection(val As Variant,alpha AS String) AS Collection
Dim groups As New Collection
For i = 2 To LastRow
For j = 2 To LastCol
groupNumber = Sheets("Sheet1").Cells(i, j).Value
i_Variable = "i_" & CStr(groupNumber) & alpha
groups.Add val, i_Variable
Next j
Next i
set buildCollection = groups
End
Mais sans plus d'informations sur votre structure, je ne peux pas vraiment vous aider au-delà des exemples de base.Qu'est-ce que le numéro de groupe ?Est-ce un véritable entier ?Qu’est-ce que A contre B ?Veuillez nous aviser car cela peut être plus simple que je ne le pensais au départ.Si vous mettez des exemples de données ou quelque chose comme ça, je suis sûr que je pourrais faire fonctionner cela pour vous, cela semble être une boucle assez simple.Bien que vous parcouriez toutes les cellules et que vous affirmiez qu'il s'agit de numéros de groupe, cela me semble déroutant.