vba中的多变量查找

时间:2015-08-29 17:41:32

标签: excel vba

我正在尝试让我的宏查找两个值,然后从外部工作表中返回货币金额。该表应该从“NPR”中提取数据并将其放入main中定义的单元格中,但是我能使其运行的唯一方法是将公式输入到选定的单元格中。这是一个很好的方法,但我希望它比这更清洁。我尝试过两种方式:

这会出现错误1004,用户定义或变量定义错误。

Cells(3, 3).Value = Application.WorksheetFunction.Index(Sheets("NPR").Range(Cells(1, 14), Cells(44, 14)), Application.WorksheetFunction.Match(Sheets("Main").Cells(3, 1) & Sheets("Main").Cells(3, 2), Sheets("NPR").Range(Cells(1, 1), Cells(44, 1)) & Sheets("NPR").Range(Cells(1, 2), Cells(44, 2))))

或者:

Range("C3").Value = Application.WorksheetFunction.Index(Sheets("NPR").Range("N1:N44"), Application.WorksheetFunction.Match(Sheets("Main").Range("A3") & Sheets("Main").Range("B3"), Sheets("NPR").Range("A1:A44") & Sheets("NPR").Range("B1:B44")))

这给了我错误13,Excel VBA类型不匹配。我希望能够在循环中使用第一个循环来旋转多个项目。请帮忙!

1 个答案:

答案 0 :(得分:0)

您正在尝试调整困难的数组样式工作表公式,VBA正在窒息。以下三种替代方法使用AGGREGATE¹ function将行numnber提供给INDEX function

Dim ws As Worksheet, app As Application

Set app = Application
Set ws = Worksheets("NPR")

With Worksheets("Main")
    'method 1
    .Cells(3, 3) = [INDEX(NPR!N1:N44, AGGREGATE(15, 6, ROW(1:44)/(NPR!A1:A44=Main!A3)*(NPR!B1:B44=Main!B3), 1))]
    'method 2
    .Cells(3, 3) = app.Evaluate("INDEX(NPR!N1:N44, AGGREGATE(15, 6, ROW(1:44)/(NPR!A1:A44=Main!A3)*(NPR!B1:B44=Main!B3), 1))")
    'method 3
    .Cells(3, 3).Formula = "=INDEX(NPR!N1:N44, AGGREGATE(15, 6, ROW(1:44)/(NPR!A1:A44=Main!A3)*(NPR!B1:B44=Main!B3), 1))"
    .Cells(3, 3) = .Cells(3, 3).Value
End With

Set ws = Nothing
Set app = Nothing

您的原始公式未使用MATCH function [match_type] 可选参数的完全匹配,但我已根据公式的性质推断出这是意图。< / p>

¹ Excel 2010引入了AGGREGATE function。早期版本不提供。