Поиск значения в диапазоне (условии) в каждом массиве значений в таблицах Google - PullRequest
1 голос
/ 16 июня 2020

Итак, у меня есть набор данных, в котором каждая строка содержит массив значений от 0 до 600, который в конечном итоге будет расширяться до конца листа. Это выглядит примерно так. Я пытаюсь найти значение, которое находится в пределах от 100 до 200, а затем отобразить его в первом столбце. В настоящее время я использую функцию ФИЛЬТРА в следующем формате:

=FILTER(H2:BI2, H2:BI2 > 100, H2:BI2 < 200)

Это возвращает ожидаемые результаты для каждой строки. Однако я хотел бы использовать формулу массива, чтобы применить ее ко всему столбцу, что я сделал в этом формате:

=ARRAYFORMULA(FILTER(H2:BI, H2:BI > 100, H2:BI < 200))

Однако это не работает с сообщением об ошибке «Диапазон ФИЛЬТРА должен быть одна строка или один столбец. ". Как лучше всего это решить? Заранее спасибо.

[РЕДАКТИРОВАТЬ: Мои данные - это контролируемый набор данных, в котором только одно из значений будет в этом диапазоне. Если в редких случаях появляются два значения, их можно проигнорировать или просто выбрать первое.]

1 Ответ

2 голосов
/ 16 июня 2020

Если у вас может быть более одного значения, удовлетворяющего условиям (для единственного в строке это также работает), тогда эта формула даст вам столбец с первыми значениями для каждой строки:

=ARRAYFORMULA(
  IFNA(INT(REGEXEXTRACT(
    TRANSPOSE(
      QUERY(
        TRANSPOSE(
          IF((H2:BI > 100) * (H2:BI < 200), H2:BI, "")
        ),
        ,
        COLUMNS(H2:BI)
      )
    ),
    "^\s*(\d+)"
  )))
)

enter image description here

UPD

Если вы уверены, что существует не более одного значения, удовлетворяющего условиям, вы также можете используйте эту формулу:

=TRANSPOSE(
  SPLIT(
    TEXTJOIN(
      "",
      True,
      {
        ARRAYFORMULA(IF((H2:BI > 100) * (H2:BI < 200), H2:BI, "")) ,
        {
          TRANSPOSE(SPLIT(REPT(",-", ROWS(H2:BI) - 1), "-", True, True)); ""
        }
      }
    ),
    ",",
    True,
    False
  )
)

В ячейке будет число, или в ячейке будет "", если в строке нет числа, превышающего 100 и <200. </p>

enter image description here

...