насколько я понимаю, вы используете оператор пересечения (пробел) в своей индексной формуле: "$C2531:$C2731 <1". Это позволит сравнить каждую ячейку в одном диапазоне ($C2531$C2731) с другим диапазоном, но в этом случае сравнение "<1". Таким образом, пересечение будет возвращать диапазон, содержащий истинное или ложное значение для каждого сравнения (т. е. формула массива.) Матч будет смотреть на этот результирующий диапазон для "истинных" значений.
другими словами, формула относительно сложный за кулисами, и хотя он короткий для чтения, в VBA вы хотите сохранить вещи как можно более простыми и ясными с точки зрения "за кулисами" - или вы столкнетесь с проблемами. То, что вы пытаетесь достичь, просто, но зубрить функции INDEX и MATCH в VBA нет.
в Visual Basic отсутствует собственный оператор пересечения. От того, что я могу найти, единственный эквивалент-это приложение.Функция пересечения, которая принимает объекты диапазона в качестве параметров. К сожалению, хотя вы можете создать первый диапазон как " Set myRange = Range ("$C2531:$C2731"), я не смог создать объект диапазона" <1 " в VBA, поскольку это не допустимый диапазон ячеек. Таким образом, кажется, что оператор пересечения в формулах Excel более способен/гибок, чем приложение.Метод пересечения в VBA. И это точка отказа здесь ("$C2531:$C2731 <1 " не является действительным VBA)
теперь вы можете потратить день, пытаясь увидеть, сможете ли вы пересечь диапазон и "<1 " в VBA, но есть более простые способы сделать это в VBA. Если бы это был я, я бы не использовал функции листа,а просто использовал стандарт...Следующий цикл, чтобы перейти по строкам и сделать сравнение в простой visual basic для каждой ячейки в диапазоне. Если одно сравнение совпадает, верните номер строки.
чтобы получить представление, это будет выглядеть примерно так:
Dim myRange As Range
Set myRange = Range("$C2531:$C2731")
For y = 1 to myRange.Cells.Rows.Count
If y < 0 Then
result = myRange.Cells(y,1).Row
End
Next y