У меня есть этот кусок кода, который работает, когда я ввожу его внутри ячейки
=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)
Так может ли кто-нибудь указать мне, где моя ошибка, или я даже делаю это правильно?
заранее спасибо
Имея в виду, что внутренняя матрица отражает условие, основанное на логике рабочего листа (возвращает массив значений ячеек 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). Адреса) ?
Кроме того, как я могу ссылаться на переменную (массив строк (но итерацию с циклом for) на часть ""Some_value""
объявление 1) Выражение, которое нужно оценить, является строкой; поэтому вам нужно заменить соответствующую часть, не включая объект диапазона, а присоединив адрес диапазона "$B:$B"
в виде текста, например. через Evaluate("(" & Sheet1.columns(2).Address & " = ""Some_value1"")*...
объявление 2) Я не совсем понимаю, что вы имеете в виду. - Возможно, вам следует задать другой вопрос, поскольку он, кажется, отклоняется от первоначальной проблемы :-)
То же самое, что вы ответили в объявлении 1), но по ценности, которую я ищу. Как заменить Some_value на переменную : Search_term ? Я пробовал с "" & Search_term(i) & "", но это не сработало
Ничего себе, я разобрался. Просто напишите """ & Search_term(i) & """"
Рад, что это сработало; так что я думаю, вы поняли двойные кавычки внутри строки и ее кумулятивный внешний вид.
В этом коде Some_value1/2 является строкой