使用计数找到最小值,然后找出计数是什么

时间:2017-03-15 01:16:58

标签: vba excel-vba excel

我试图从我的Inv变量中获取最小值..但是我认为我可以将i = y添加到If Tmp ...语句的末尾,所以一旦它适用于Tmp&lt ;有趣的是它可以将i计数设置为y,然后我可以稍后再去使用(Inv(y))对象。不确定这是否会起作用它现在在我的头脑中是有道理的。总结我的问题...为什么msgbox y最终给我的值为0,即使我不是。任何反馈都会很棒,非常感谢您提前

Dim Fun As Variant
Dim Tmp As Variant
Dim Inv() As String
Dim i As Integer
Dim y As Integer

Inv = Split("NBInv NEBInv EBInv SEBInv SBInv SWBInv WBInv NWBInv")
Fun = 1000

For i = 0 To UBound(Inv)
    Tmp = Val(ActiveSheet.OLEObjects(Inv(i)).Object.Value)
    If Tmp <> 0 And Tmp <> "" And Tmp < Fun Then Fun = Tmp And i = y
Next i

Smallest = Fun
MsgBox y

1 个答案:

答案 0 :(得分:1)

让我们将您的If语句拆开,看看它实际上 做了什么

将条件表达式拉入其块:

If Tmp <> 0 And Tmp <> "" And Tmp < Fun Then 
    Fun = Tmp And i = y
End If

在赋值右侧添加隐含括号:

If Tmp <> 0 And Tmp <> "" And Tmp < Fun Then 
    Fun = (Tmp And i = y)
End If

将隐含括号添加到And

的右侧
If Tmp <> 0 And Tmp <> "" And Tmp < Fun Then 
    Fun = (Tmp And (i = y))
End If

现在查看表达式i = y - 因为它位于右侧,所以评估为Boolean,因此它是0或{ {1}}投射到数字时。我们假设它是-1并将其放回表达式:0。这是执行二进制和操作。然后,您将结果分配给Temp And 0。这是唯一可以设置的东西。

猜测你的意图是......

Temp

...虽然分配给你的循环计数器是一个坏主意。