2015-08-29 6 views
0

Я пытаюсь, чтобы мой макрос просматривал два значения, а затем возвращал сумму валюты из внешнего листа. Лист должен вытащить данные из «NPR» и поместить его в определенную ячейку в главном, но единственный способ заставить его функционировать - это ввести формулу в выбранные ячейки. Это прекрасный способ сделать это, но я бы хотел, чтобы он был чище, чем этот. Я пробовал это двумя способами:Многовариантный поиск в vba

Это связано с ошибкой 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"))) 

Что дает мне Error 13, Excel VBA тип рассогласование. Я хотел бы иметь возможность использовать первый в цикле для вращения по нескольким элементам, как только я это получу. Пожалуйста помоги!

ответ

0

Вы пытаетесь адаптировать сложную формулу таблицы стилей массива и VBA задыхается от нее. Ниже приведены три альтернативных метода с использованием AGGREGATE¹ function для подачи номера строки в 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 «s [тип_сопоставления] необязательный параметр, но я indferred, что было намерение природой формулы.

¹ AGGREGATE function был представлен с Excel 2010. Он не доступен в более ранних версиях.

Смежные вопросы