如何解决比较递增常量的值有多容易?
有几个常量 TAX1,TAX2,TAX3,...,TAX_y 进一步的数组 (arrSorted) 数据、价格、... 我需要将值 arrSorted(allRow,8) 与 TAX 进行比较并求和。 但是如何增加常量 TAX 的结束编号?
for i = LBound... to UBound...
for y = 1 to 5
if arrSorted(i,8) = TAX & y then 'i dont kNow how TAX & y...
' SUMS HERE
end if
next y
next i
我现在有这个重复代码(这不是很好):
Function prepareData(arrSorted() As Variant)
Dim qi As Integer
Dim qy As Integer
Dim sumPrice(0 To 4,0 To 5) As Variant
For qi = LBound(arrSorted(),1) To UBound(arrSorted(),1)
Select Case arrSorted(qi,8)
Case Is = TAX1
For qy = LBound(sumPrice,2) To UBound(sumPrice,2)
sumPrice(0,qy) = sumPrice(0,qy) + arrSorted(qi,qy + 4)
Next qy
Case Is = TAX2
For qy = LBound(sumPrice,2)
sumPrice(1,qy) = sumPrice(1,qy + 4)
Next qy
Case Is = TAX3
For qy = LBound(sumPrice,2)
sumPrice(2,qy) = sumPrice(2,qy + 4)
Next qy
Case Is = TAX4
For qy = LBound(sumPrice,2)
sumPrice(3,qy) = sumPrice(3,qy + 4)
Next qy
Case Is = TAX5
For qy = LBound(sumPrice,2)
sumPrice(4,qy) = sumPrice(4,qy + 4)
Next qy
Case Else
MsgBox "Alert!",vbCritical
End Select
Next qi
End Function
解决方法
您不能在代码执行期间动态调整代码模块内的变量名称。
但是您可以做的是将所有常量放入一个数组中并循环遍历常量数组,直到找到您要查找的那个。
或者您可以将所有常量放入一个 dictionary 中,以它们的变量名作为键。所以 MyDictionary("TAX1") = TAX1
是真的。在您的代码中,您可以执行 If arrSorted(i,8) = MyDictionary("TAX" & y)
。
以下是如何创建字典对象的示例:
Dim MyDictionary As Object
Set MyDictionary = CreateObject("Scripting.Dictionary")
'Putting the constants inside with their variable name as the key
MyDictionary.Add Key:="TAX1",Item:=TAX1
MyDictionary.Add Key:="TAX2",Item:=TAX2
MyDictionary.Add Key:="TAX3",Item:=TAX3
MyDictionary.Add Key:="TAX4",Item:=TAX4
MyDictionary.Add Key:="TAX5",Item:=TAX5
MyDictionary.Add Key:="TAX6",Item:=TAX6
MyDictionary.Add Key:="TAX7",Item:=TAX7
MyDictionary.Add Key:="TAX8",Item:=TAX8
'How to retrieve their values
MsgBox MyDictionary("TAX8")
,
使用字典和 exists
方法代替 Select Case
。
Function prepareData(arrSorted() As Variant)
Const TAX1 = 5
Const TAX2 = 10
Const TAX3 = 15
Const TAX4 = 20
Const TAX5 = 25
Dim qi As Integer,qy As Integer,key As String,i As Integer
Dim sumPrice(0 To 4,0 To 5) As Variant
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
dict.Add CStr(TAX1),0
dict.Add CStr(TAX2),1
dict.Add CStr(TAX3),2
dict.Add CStr(TAX4),3
dict.Add CStr(TAX5),4
For qi = LBound(arrSorted(),1) To UBound(arrSorted(),1)
key = Trim(arrSorted(qi,8))
If dict.exists(key) Then
i = dict(key)
For qy = LBound(sumPrice,2) To UBound(sumPrice,2)
sumPrice(i,qy) = sumPrice(i,qy) + arrSorted(qi,qy + 4)
Next qy
Else
MsgBox "Alert! Row " & qi,vbCritical,"Value=" & key
End If
Next qi
' result
Sheet2.Range("A1:F5").Value2 = sumPrice
End Function
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。