Как сопоставить все элементы массива в гугл листе - PullRequest
1 голос
/ 25 марта 2020

У меня есть таблица и список индексов, я хочу, чтобы листы Google возвращали список совпадающих значений. Примерно так, но я не работаю в этом случае. Можете ли вы помочь мне правильно сформулировать, что он работает на Google Sheet.

=TEXTJOIN(",",TRUE,INDEX(A2:B4,N(IF(1,D2))))

google sheet table

Ответы [ 2 ]

2 голосов
/ 25 марта 2020

Поместите это в E2 и скопируйте его

=TEXTJOIN(",", TRUE, ARRAYFORMULA(VLOOKUP(SPLIT(D2, ","), $A$2:$B$4, 2, 0)))

enter image description here

1 голос
/ 25 марта 2020

Вы можете сделать это с формулой в одной ячейке (не нужно копировать ее):

=TRANSPOSE(SPLIT(TEXTJOIN(",", FALSE, ARRAYFORMULA(IFNA(VLOOKUP(SPLIT(TEXTJOIN(",,", FALSE, $D$2:$D$5), ",", TRUE, FALSE), $A$2:$B$4, 2, 0)))), ",,", FALSE, FALSE))

enter image description here

Что именно эта формула делает, идя изнутри (от TEXTJOIN(",,", ... до TRANSPOSE(...):

  1. Первый TEXTJOIN присоединяется к диапазону Условие (D2:D4 или больше, если необходимо) в одну строку.

    • ",," (точная строка из двух запятых) используется в качестве разделителя: разрешена запятая (вы уже используете ее, означает, что в столбце A2:A4) не должно быть запятых, а две запятые можно отличить только от одной.
    • Пустые строки (в данном случае ячейки) исключать нельзя, поэтому результат будет выровнен с оригиналом data.
  2. Первый SPLIT дает список ключей, которые можно найти в A2:A4.

    • Пустые строки сохраняются, поэтому позже можно собрать все это вместе, используя ",,". Пустые строки теперь являются разделителями.
  3. VLOOKUP заменяет ключи (A2:A4) на значения (B2:B4)

  4. IFNA необходим, поэтому VLOOKUP не захлебнется пустой строкой, переданной в качестве ключа. Пустая строка останется пустой строкой.

  5. ARRAYFORMULA эффективно требуется для передачи диапазона ключей (от шага 2) до VLOOKUP вместо одной клавиши .

  6. Second TEXTJOIN собирает все эти значения обратно вместе.

    • Пустые строки сохраняются, поскольку они являются разделителями между двумя Условия .
    • Из-за пустых строк результаты для каждой строки будут разделены ",," (двумя запятыми).
  7. Используется секунда SPLIT для разделения результатов для каждой строки.

    • Пустые строки сохраняются для выравнивания с исходными данными.
  8. TRANSPOSE просто поворачивает результат в столбец.


То же самое в удобочитаемой форме (допустимо ввести такую ​​формулу):

=TRANSPOSE(
  SPLIT(
    TEXTJOIN(
      ",",
      FALSE,
      ARRAYFORMULA(
        IFNA(
          VLOOKUP(
            SPLIT(
              TEXTJOIN(
                ",,",
                FALSE,
                $D$2:$D$4
              ),
              ",",
              TRUE,
              FALSE
            ),
            $A$2:$B$4,
            2,
            0
          )
        )
      )
    ),
    ",,",
    FALSE,
    FALSE
  )
)
...