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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top