Насколько я понимаю, вы используете оператор пересечения (пробел) в вашей формуле INDEX: "$ C2531: $ C2731 <1". Это позволит сравнить каждую ячейку в одном диапазоне ($ C2531 $ C2731) с другим диапазоном, но в этом случае вместо этого будет выполнено сравнение «<1». Таким образом, пересечение будет возвращать диапазон, содержащий значение ИСТИНА или ЛОЖЬ для каждого сравнения (т. Е. Формула массива). Затем MATCH будет смотреть на этот результирующий диапазон для значений "ИСТИНА".
Другими словами, формула относительно сложна за кулисами, и, хотя она коротка для чтения, в VBA вы хотите, чтобы все было как можно проще и понятнее с точки зрения "закулисного" - иначе вы столкнетесь с проблемами , То, чего вы пытаетесь достичь, - это просто, но втиснуть функции VEX и INDCH в VBA - нет.
В Visual Basic нет собственного оператора пересечения. Из того, что я могу найти, единственным эквивалентом является приложение.Функция пересечения, которая принимает объекты Range в качестве параметров. К сожалению, хотя вы можете создать первый диапазон как «Set myRange = Range(« $ C2531:$ C2731 »), мне не удалось создать объект Range с« <1 »в VBA, поскольку это недопустимая ячейка спектр. Таким образом, кажется, что оператор пересечения в формулах Excel является более способным / гибким, чем приложение.Пересечь метод в VBA. И это точка сбоя здесь («$ C2531:$ C2731 <1» не является допустимым VBA)
Теперь вы можете потратить целый день, пытаясь понять, можете ли вы пересечь диапазон и «<1» в VBA, но в VBA есть более простые способы сделать это. Если бы это был я, я бы не использовал функции Worksheet, а просто использовал бы стандартный For ...Следующий цикл, чтобы пройтись по строкам и провести сравнение в простой визуальной основе для каждой ячейки в вашем Range. Если одно сравнение совпадает, вернуть номер строки.
Чтобы получить представление, это будет выглядеть примерно так:
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