VBA比较多个variables
有什么办法来比较VBA中的多个variables? 例如:
Dim x As Integer Dim y As Integer Dim z As Integer x = 99 y = 2 z = 3
我想返回最小的值。 我知道我可以使用select case x > y
所有可能的排列组合,但是对于超过3个variables来说似乎很难处理。
我已经尝试了工作表函数
solution = Application.WorksheetFunction.Min(x, y, z)
但返回2
,我希望它返回variables名称传递给另一个函数。
非常感谢,
编辑:我很抱歉,如果这是混乱,我仍然是一个VBA新手。 这是我的问题更普遍一点:
我有一个对应于名称的代码列表,每个代码有很多名字。 我想遍历每个代码的每个名称,并计算名称出现在列表上的实例的数量,并select具有最less出现次数的名称。 (可以是0或可以与其他名称相同)。 显然如果有2个名字,那么if x>y then
很容易做,但是我比较难以比较3。
使用公共数组而不是多个variables。 这样可以很容易地遍历它们并获得最高值,以及稍后引用具有最高值的variables:
Public myArray(0 To 2) As Integer Public index As Integer Public Sub calcMin() Dim i As Integer Dim maxValue As Integer myArray(0) = 99 myArray(1) = 2 myArray(2) = 3 For i = 0 To UBound(myArray) If myArray(i) < maxValue Then maxValue = myArray(i) index = i End If Next i End Sub Function yourFunction(valueToPass As Integer) 'your function's code here End Function
然后将variables传递给yourFunction
如下所示: yourFunction(myArray(index))
和Mike的想法一样,但是用一个例子来调用一个最小值的子集:
Sub main() Dim arrComp(2) As Integer arrComp(0) = 99 arrComp(1) = 2 arrComp(2) = 3 'It is important to initialize the tmpVal to a value from the array 'to consider the chance where negative and positive values are used Dim tmpVal As Integer: tmpVal = arrComp(LBound(arrComp)) Dim i As Integer, minIndex As Integer For i = LBound(arrComp) To UBound(arrComp) If arrComp(i) < tmpVal Then tmpVal = arrComp(i) minIndex = i End If Next i showMinVal arrComp(minIndex) End Sub Sub showMinVal(MinVal As Integer) MsgBox "The min value is " & MinVal End Sub
或者,如果您希望与该值关联的名称的解决方法 ,您可以定义一个新的Type
:
'Types must be declared at the top of the module Type tVarName varName As String varVal As Integer End Type Sub main() Dim arrComp(2) As tVarName arrComp(0).varName = "x" arrComp(0).varVal = 99 arrComp(1).varName = "y" arrComp(1).varVal = 2 arrComp(2).varName = "z" arrComp(2).varVal = 3 Dim tmpVal As Integer: tmpVal = arrComp(LBound(arrComp)).varVal Dim i As Integer, minIndex As Integer For i = LBound(arrComp) To UBound(arrComp) If arrComp(i).varVal < tmpVal Then tmpVal = arrComp(i).varVal minIndex = i End If Next i showMinVal arrComp(minIndex) End Sub 'Sub showing min value along with the name associated to it Sub showMinVal(MinVal As tVarName) MsgBox "The min value is " & MinVal.varName & " = " & MinVal.varVal End Sub