Формула массива для поиска ключевых слов в строке в Google Sheets

Вопрос или проблема

У меня есть список строк, описывающих мой банковский отчет. И я хочу категоризировать их с помощью формулы.

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

Например, у меня есть строка “aaa bbb ccc”, она работает нормально, когда я ищу “aaa ccc” с помощью regexmatch, но не работает, когда я пытаюсь искать “ccc aaa”. Я также пробовал использовать комбинации формул SEARCH, MAP, LAMBDA, но безуспешно.

Вот пример случая.
https://docs.google.com/spreadsheets/d/1W-8P3Tj1M0ICm5-4pNnX9oM_NLU9pmUpp2k6QP7ObpM/edit?gid=1763746401#gid=1763746401

Объяснение:

  1. Столбец A листа описания содержит описания, которые нужно категоризировать.
  2. Столбец B листа описания содержит мои формулы regex, map и lambda. Успешно сработало в B2, однако в B4 возникла ошибка.
  3. Столбец C листа описания содержит мою формулу поиска, map и lambda.
  4. Столбец A листа ключевых слов содержит ключевые слова (разделенные запятыми), а столбец B содержит категорию.

Проблема видна в описании!B4, где возвращается ошибка, поскольку “kkk ttt” не может быть сопоставлено с “ttt,kkk”.

Есть ли способ решить эту проблему? Мне нужна массивная формула, чтобы не тянуть формулу вниз снова и снова, и чтобы было проще поддерживать. Помощь с листами или колонками ок, если это массиовая формула.

Ответ или решение

Для решения вашей задачи по категоризации описаний на основе ключевых слов в Google Sheets, мы можем использовать формулы массива и функционал LAMBDA, чтобы обойти ограничения поиска с учетом порядка слов.

Шаг 1: Подготовка данных

Убедитесь, что у вас есть две таблицы:

  1. Sheet1 (или ваш основной лист), где в столбце A находятся описания.
  2. Sheet2 (или лист с ключевыми словами), где в столбце A находятся ключевые слова, разделенные запятыми, а в столбце B – соответствующие категории.

Шаг 2: Формула

В ячейке B2 вашего основного листа (Sheet1) добавьте следующую формулу для реализации поиска ключевых слов с учетом неупорядоченности:

=ARRAYFORMULA(IF(A2:A="", "", 
    IFERROR(VLOOKUP(
        FLATTEN(
            UNIQUE(
                TRIM(TRANSPOSE(SPLIT(A2:A, " ")))
            )
        ), 
        FILTER(SPLIT(FLATTEN(Sheet2!A:A & "|" & Sheet2!B:B), "|"), ROW(Sheet2!A:A) > 0), 
        2, FALSE), 
        "Не найдено"
    ))
))

Объяснение формулы

  1. SPLIT(A2:A, " "): Делит каждое описание на отдельные слова.
  2. TRANSPOSE и UNIQUE: Создают массив уникальных слов из каждого описания.
  3. FLATTEN: Преобразует многомерный массив в одномерный, что позволяет использовать его в дальнейших вычислениях.
  4. FILTER: Находит ключевые слова из Sheet2 и соответствующие категории, если ключевые слова присутствуют в описании.
  5. VLOOKUP: Сопоставляет найденные уникальные ключевые слова с категориями и возвращает их.
  6. IFERROR: Если поиск не успешен, возвращает сообщение "Не найдено".

Шаг 3: Применение формулы

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

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...