Neudefinition eines ganzzahligen vba
-
20-12-2019 - |
Frage
Ich habe Schwierigkeiten, das folgende Problem zu beheben, mit dem ich konfrontiert bin:
Nehmen wir an, ich habe diesen 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
Als Ergebnis bekomme ich i_Variable als String in einer Messagebox als Ergebnis:
I_gruppennummer A
Ich möchte folgendes Ergebnis haben:
35
Ich frage, wie ich eine neue Variable einer Zeichenfolge erhalten kann, die als Ganzzahl funktioniert.
Ich bin mir nicht sicher, ob ich das richtig frage?
Ich habe getan, was @engineersmnky gesagt hat, aber keine Wirkung.Ich überprüfe Websites und habe zusammen mit Ihrem Code einige Anpassungen vorgenommen.Aber ich kann immer noch nicht die benötigte Nummer dafür bekommen.Bisher habe ich das verstanden:
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
Gruppe (i_variable) Ich kann es nicht herausfinden?aus irgendeinem Grund funktioniert es nicht.
Lösung
Da Sie keinen Variablenwert aus einer Zeichenfolge in erhalten können vba
Ich würde vorschlagen, eine zu erstellen Collection
Objekt oder ein Dictionary
wenn Sie etwas vielfältigeres brauchen
dim groups AS New Collection
'Value, Key
groups.Add 35, "i_GroupNumberA"
groups.Add 39, "i_GroupNumberB"
Dann können Sie in Ihrer Schleife anstelle des Meldungsfelds Folgendes verwenden
groups(i_Variable)
Dies gibt 35 für "i_GroupNumberA" zurück
Update Sammlungen verwenden eine Element- und Schlüsselstruktur für Collection(Key)
um den gewünschten Wert zurückzugeben, müssen Sie Folgendes angeben key
Möglicherweise müssen Sie eine Sammlung dynamisch mit Ihren benötigten Gruppennummern erstellen, da ich mir nicht sicher bin, was diese sind, z.
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
Aber ohne weitere Informationen zu Ihrer Struktur kann ich über grundlegende Beispiele hinaus nicht wirklich helfen.Was ist die Gruppennummer?Ist es eine tatsächliche Ganzzahl?Was ist A vs B?Bitte raten Sie, da dies möglicherweise einfacher ist, als ich ursprünglich dachte.Wenn Sie einige Beispieldaten oder etwas Anderes eingeben, bin ich mir sicher, dass ich das für Sie zum Laufen bringen könnte, scheint eine ziemlich einfache Schleife zu sein.Obwohl Sie alle Zellen durchlaufen und angeben, dass es sich um Gruppennummern handelt, was mir verwirrend erscheint.