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