excel VBA索引和匹配函数

时间:2017-01-31 16:46:18

标签: excel-vba worksheet-function vba excel

我正在尝试将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))

...扫描前10行Col H.

此公式查找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

...行(1)是第一行,列(24)是Col X.

当我运行代码时,我得到运行时错误不匹配&#39; 13:类型不匹配。

我想了解前一个问题是如何得到回答的:Excel VBA: how to solve Index and Match function type mismatch error

2 个答案:

答案 0 :(得分:1)

以前面回答的问题为例。您将匹配结果推送到索引公式中。如果匹配结果没有找到匹配,那么它将返回错误2042,当它被推入索引公式时会给出不匹配错误。

根据您的示例调整该解决方案如下:

authenticationManager.SignIn(
    new AuthenticationProperties { IsPersistent = false }, 
    new ClaimsPrincipal(newIdentity));

答案 1 :(得分:1)

我认为一旦你想使用VBA,你需要使用VBA添加的功能,而不是坚持你在Excel中构建的公式。

因为,您正在寻找H列中第一个具有非零值的单元格,您可以使用Application.Match轻松找到它,但您需要将匹配的第三个参数设置为{{1} }(表示大于,查找值> 0.01的匹配项。)

现在,我们有行号,如果要在此行的列X中找到值,可以使用-1

代码

Range("AC2").Value = Range("X" & MatchRow + Rng.Item(0).Row).Value
相关问题