Vba 使用count查找最小值,然后找出该计数是多少
我试图从Inv变量中获取最小值。。这是可行的,但是我想我可能可以将I=y添加到If-Tmp的末尾。。。语句,因此一旦它应用于TmpVba 使用count查找最小值,然后找出该计数是多少,vba,excel,Vba,Excel,我试图从Inv变量中获取最小值。。这是可行的,但是我想我可能可以将I=y添加到If-Tmp的末尾。。。语句,因此一旦它应用于Tmp
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
Dim Fun作为变体
Dim Tmp作为变体
Dim Inv()作为字符串
作为整数的Dim i
Dim y作为整数
投资=分割(“NBInv NEBInv EBInv SEBInv SBInv SWBInv WBInv NWBInv”)
乐趣=1000
对于i=0到uBond(Inv)
Tmp=Val(ActiveSheet.OLEObjects(Inv(i)).Object.Value)
如果Tmp 0和Tmp“”以及Tmp
让我们将您的If
语句拆分,看看它实际上做了什么:
将条件表达式拉入其块:
If Tmp <> 0 And Tmp <> "" And Tmp < Fun Then
Fun = Tmp And i = y
End If
现在看一下表达式i=y
——因为它在右边,所以它的计算结果是布尔值
,所以当转换为数字时,它要么是0
,要么是-1
。让我们假设它是0
,并将其放回表达式:Temp和0
。这是执行二进制And操作。然后将结果分配给Temp
。这是唯一的一件事
我猜你的意图是
If Tmp <> 0 And Tmp <> "" And Tmp < Fun Then
Fun = Tmp
i = y
End If
如果Tmp 0和Tmp“”以及Tmp
…虽然分配给循环计数器是个坏主意。
y
最后是0,因为您从未将y
设置为任何值-因此它只给出默认值0
“然后Fun=Tmp和i=y”我也尝试了y=i,但仍然给出了0。这还没定下来吗?
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
i = y
End If