excel:索引并与vba匹配

时间:2017-06-29 04:34:21

标签: excel vba excel-vba excel-formula

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

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="analytics">Something to Click to Count to 20</button>

enter image description here

它完全符合我的要求:通过匹配表格标题来匹配结果,查看Plan2(我的数据库)中有关Plan3列B的信息。

我想知道的是将其转换为执行相同操作的VBA。这是我到目前为止所尝试的:

=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));"")

当我尝试跑步时,我收到消息:

  

编译错误:参考无效。

我突然强调了这一行:

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

这是我第一次尝试翻译公式在VBA中执行代码,所以我真的不知道出了什么问题。

任何建议都将受到赞赏。

2 个答案:

答案 0 :(得分:0)

您使用了.match,但之前没有With声明。您也不必在公式中使用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

答案 1 :(得分:0)

试试这个:

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显示公式结果。