Индекс Excel VBA внутри функции соответствия

У меня есть этот кусок кода, который работает, когда я ввожу его внутри ячейки

=MATCH(1;INDEX(($B:$B = "Some_value1")*($D:$D = "Some_value2");0);0)

Когда я «перевожу» его в код VBA, я получаю ошибку несоответствия типов.

Debug.Print Application.WorksheetFunction.Match(1, Application.WorksheetFunction.Index((Range("B:B") = "Some_value1") * (Range("D:D") = "Some_value2"), 0), 0)

Так может ли кто-нибудь указать мне, где моя ошибка, или я даже делаю это правильно?

заранее спасибо

В этом коде Some_value1/2 является строкой

mrunje 26.12.2020 18:50
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
2
1
138
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Имея в виду, что внутренняя матрица отражает условие, основанное на логике рабочего листа (возвращает массив значений ячеек 0 или 1), кажется, что вы должны выполнить оценку, по крайней мере, в части INDEX:

Debug.Print WorksheetFunction.Match(1, WorksheetFunction.Index(Evaluate("($B:$B = ""Some_value1"")*($D:$D = ""Some_value2"")"), 0), 0)

или для оценки всего выражения:

Debug.Print Evaluate("=MATCH(1,INDEX(($B:$B = ""Some_value1"")*($D:$D = ""Some_value2""),0),0)")

Это решение. Спасибо. Другой вопрос: нужно ли использовать переменные для ввода диапазона (например, диапазон $B:$B), или я могу написать Sheet.Range(Sheet.Cells(x,y).Address,Sheet.Cells(z,y). Адреса) ?

mrunje 26.12.2020 20:09

Кроме того, как я могу ссылаться на переменную (массив строк (но итерацию с циклом for) на часть ""Some_value""

mrunje 26.12.2020 20:25

объявление 1) Выражение, которое нужно оценить, является строкой; поэтому вам нужно заменить соответствующую часть, не включая объект диапазона, а присоединив адрес диапазона "$B:$B" в виде текста, например. через Evaluate("(" & Sheet1.columns(2).Address & " = ""Some_value1"")*...

T.M. 26.12.2020 20:40

объявление 2) Я не совсем понимаю, что вы имеете в виду. - Возможно, вам следует задать другой вопрос, поскольку он, кажется, отклоняется от первоначальной проблемы :-)

T.M. 26.12.2020 20:54

То же самое, что вы ответили в объявлении 1), но по ценности, которую я ищу. Как заменить Some_value на переменную : Search_term ? Я пробовал с "" & Search_term(i) & "", но это не сработало

mrunje 26.12.2020 21:07

Ничего себе, я разобрался. Просто напишите """ & Search_term(i) & """"

mrunje 26.12.2020 21:11

Рад, что это сработало; так что я думаю, вы поняли двойные кавычки внутри строки и ее кумулятивный внешний вид.

T.M. 26.12.2020 21:17

Другие вопросы по теме