excel:用vba进行索引和匹配

excel:用vba进行索引和匹配,vba,excel,excel-formula,Vba,Excel,Excel Formula,我在工作表的第一列中有一个公式: =IFERROR(INDEX(Plan2!$A$1:$K$20;MATCH(Plan3!B2;Plan2!$B$1:$B$20;0);MATCH(Plan3!$A$1;Plan2!$A$1:$K$1;0));"") 它完全符合我的要求:通过匹配表头来匹配结果,在Plan2(我的数据库)上查找Plan3的B列上的信息 我想知道的是把它转换成一个VBA来做同样的事情。这就是我迄今为止所尝试的: Sub AlocSubs() Dim i As Long Dim

我在工作表的第一列中有一个公式:

=IFERROR(INDEX(Plan2!$A$1:$K$20;MATCH(Plan3!B2;Plan2!$B$1:$B$20;0);MATCH(Plan3!$A$1;Plan2!$A$1:$K$1;0));"")

它完全符合我的要求:通过匹配表头来匹配结果,在Plan2(我的数据库)上查找Plan3的B列上的信息

我想知道的是把它转换成一个VBA来做同样的事情。这就是我迄今为止所尝试的:

Sub AlocSubs()

Dim i As Long
Dim ws1 As Worksheet
Dim ws2 As Worksheet

Set ws1 = Sheets("Plan2")
Set ws2 = Sheets("Plan3")

For i = 2 To 20
    ws2.Cells(i, 1).Value = Application.WorksheetFunction.Index(ws1.Range("A1:K20"), .match(ws2.Range("B2"), ws1.Range("B1:B20"), 0), .match(ws2.Range("A1"), ws1.Range("A1:K1"), 0))
Next i

End Sub
当我尝试跑步时,我会收到以下信息:

编译错误:引用无效

我突出了这一行:

Sub AlocSubs()
这是我第一次尝试用VBA翻译公式和代码,所以我真的不知道出了什么问题


如果您有任何建议,我们将不胜感激。

您使用了
.match
,但您以前没有
语句。在公式中也不使用
i
。我想应该是这样的:

With Application.WorksheetFunction
    For i = 2 To 20
        ws2.Cells(i, 1).Value = .Index(ws1.Range("A1:K20"), .Match(ws2.Range("B" & i), ws1.Range("B1:B20"), 0), .Match(ws2.Range("A1"), ws1.Range("A1:K1"), 0))
    Next i
End With
试试这个:

Sub AlocSubs()
    Dim i As Long
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim strFormula As String

    Set ws1 = Sheets("Plan2")
    Set ws2 = Sheets("Plan3")
    strFormula = "=IFERROR(INDEX(Plan2!$A$1:$K$20;MATCH(Plan3!B2;Plan2!$B$1:$B$20;0);MATCH(Plan3!$A$1;Plan2!$A$1:$K$1;0));"""")"

    With ws2
        With .Range(.Cells(2, 1), .Cells(20, 1))
            .Formula = strFormula
            .Value = .Value
        End With
    End With
End Sub

注意:我没有测试你的配方。代码显示如何使用VBA显示公式结果。

什么是。匹配(…)?好吧,这不是一个恰当的方式来称呼它…@BruceWayne事实上,对于这个问题,我试图弄清楚在VBA中使用公式是否正确,与公式的匹配是否正确,我已经在使用它了…如果匹配没有找到任何东西,代码将在执行时失败。您需要引入错误捕捉器或使用
Application.Match
而不是
Application.WorksheetFunction.Match
。我测试了这段代码,运行时得到
运行时错误1004:
它无法识别匹配函数。如果目标是使用工作表公式计算结果并输入静态值因此,您可以使用以下命令缩短代码(并可能加快代码速度):)@Vegard-
Evaluate
确实缩短了代码,你是对的,但我个人不使用Evaluate,因为字符限制,虽然这不是问题所在。@Mrig我在测试时在
行中遇到了运行时错误1004。Formula=strFormula
…@paulinhax-你的公式可能有问题,我没有测试过。你的公式在工作表上有效吗?@Mrig是的!在这篇文章的插图中,我已经在使用它了,而且效果很好。