【发布时间】:2017-01-31 16:46:18
【问题描述】:
我正在尝试将 excel 函数更改为 vba 代码。 Col AC,第 2 行中的以下公式...
=IF(ROWS($1:1)< MATCH(0.01,H$2:H$10)+1,"",INDEX(X:X,ROWS($1:1)-MATCH(0.01,H$2:H$10)+1))
...扫描 Col H 的前 10 行。
此公式在 Col H 的行中查找第一个非零值。当它找到该行时,col X 中的值将在 Col AC 中打印出来,以便 Col AC 中的行与Col H 中的第一个非零值。
我希望描述是有道理的。它在 excel 工作表中完美运行。现在,我想将其更改为 VBA 代码,这就是我所拥有的...
For i = 2 To lengthRows
With Application.WorksheetFunction
Range("AC" & i) = .IF(Rows(1) < .Match(0.01, Range("H2:H10")) + 1, "", .Index(Columns(24), Rows(1) - .Match(0.01, Range("H2:H10")) + 1))
End With
Next i
...Rows(1) 是第一行,Columns(24) 是 Col X。
当我运行代码时,我得到一个运行时错误 mismatch '13: Type mismatch。
我正在尝试了解之前的问题是如何回答的:Excel VBA: how to solve Index and Match function type mismatch error
【问题讨论】:
-
您正在使用
MATCH(0.01,H$2:H$10),它正在寻找值 0.01,而不是非零值,如果单元格等于 0.2,您的Match将不会返回它。您需要将Match更改为MATCH(0.01,H$2:H$10,-1),第三个参数等于-1表示它正在寻找大于0.01的值
标签: excel worksheet-function vba