Получить диапазоны вместо строк из массива результата формулы в Excel - PullRequest
0 голосов
/ 23 марта 2020

Формула гнезда:

 "=IF(Hoja1!$A$4=$A$15:$A$22),IF($B$4=$B$15:$B$22),IF($F$15:$F$22=0,$A$15:$A$22)))"

Полученный массив выглядит примерно так:

{FALSE \ FALSE \ FALSE \ FALSE \ FALSE \ "Title 6" \ FALSE \ FALSE}

получить массив, который является набором логических значений, и в этом случае я получаю String, но я хочу получить значения Ranges, чтобы я мог знать позицию полученного не ложного результата в результирующем массиве.

Я знаю, что могу сделать то же самое, используя циклы в VBA, но моей целью было сделать это с помощью формул. Я не знаю, может быть, есть какая-то встроенная функция, которая извлекает диапазоны, о которых я не знаю.

В качестве альтернативы я подумал, что имея известный диапазон, например $ A $ 15: $ F $ 22, я мог бы получить индексные номера результирующего массива, который имеет ненулевое значение, и создать Range.Cells (index1, index2), используя 2 индекса массива.

Кроме того, я подумал, что использование функции MATCH может сделать Это. Например,

Match(<>False, {false\"string value"},0)

И так получить номер строки, который я могу затем использовать в .Cell (). Но это не работает. Могу ли я сделать исключающий матч?

Что вы предлагаете? Любое простое / быстрое решение для этого?

Ссылка для получения даты: Range Search criteria

Источник данных Data source

1 Ответ

0 голосов
/ 23 марта 2020

Я нашел решение, которое было почти у меня на глазах.

Я не пытался использовать более одного возможного поиска в константе массива (результат формулы aray). Это точно работает в массиве с постоянными результатами, который имеет один непустой / не ложный результат.

Использование MATCH () было решением.

Использование предыдущей условной формулы Я получил массив со всеми результатами FALSE, кроме одного. Поскольку непустой / ложный результат является строкой, и я хочу знать, в каком диапазоне находится результат, используя диапазон источника данных, я извлекаю эту ячейку, используя индекс строки, взятый из функции MATCH , и затем с простым VBA у меня есть диапазон, который я хотел, вот так.

Dim F As String
Dim Res As Integer
Dim R As Range

Set R = Range("$A$15:$A$22")
F = "=MATCH($A$4,IF($A$4=$A$15:$A$22),IF($B$4=$B$15:$B$22),IF($F$15:$F$22=0,$A$15:$A$22)))),0)"

'We get the index number of the desired value in the array that
we got in *IF* parts of the array formula.
Res = Hoja1.Evaluate(F)

'Since The position in the array of the element we want is the same as the row number inside the range the value we searched for is in, we can get that range/cell easily.
Set R = R.Cells(Res, 1) 'Or the column I want.

Debug.Print R.Address

Результат - $ A $ 18.
Как мы и ожидали, он соответствует, так как внутри $ A $ 15 $: $ A $ 22 * ​​1016 * значение, которое мы искали, находится в 4-й строке внутри этого исходного диапазона. Мы можем получить и другие столбцы для этого совпадения.

...