Присвоить соответствующий заголовок столбца из таблицы с критериями соответствия списку строк в формуле массива в Google Sheets - PullRequest
0 голосов
/ 27 апреля 2020

В Google Sheet у меня есть первая вкладка с записями данных в столбце A. Я хотел бы назначить категорию для каждой записи в столбце B, используя формулу массива. Категория должна быть определена следующим образом: если во второй вкладке одна из строк столбца соответствует записи, заголовок столбца должен быть назначен как категория.

У меня есть ощущение, что должен быть способ сделать это с помощью функции query, но не могу понять это.

Этот является примером листа. Я рад немного изменить настройку листа, если этого требует решение, но хотел бы избежать взрыва листа. Также меня интересует самое простое из возможных решений.

image image

1 Ответ

0 голосов
/ 27 апреля 2020

Подход

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

Теперь давайте создадим функцию, которая извлекает данные из категорий и присваивает каждое имя соответствующему.

Это пользовательская функция, поэтому я создаю правильный заголовок документа, чтобы он был виден в контексте вашей таблицы.

/**
 * Assign the name the corresponding category.
 *
 * @param {input} the name to assign to the category
 * @return The matching category
 * @customfunction
 */
function MATCHCATEGORY(input) {
  // if the input is from ARRAYFORMULA I will reiterate along the array with a map
  if (input.map) {
    return input.map(MATCHCATEGORY)
  } else {
    // Recursion base case
    // I will get the categories rows
    var rows = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("CATEGORIES").getDataRange().getValues();
    var category = "";
    // Now I will map a string matching function along the rows 
    rows.map(row => {
        let no_blanks = row.filter(value => value != "");
        for (var i=1; i<no_blanks.length; i++) {
            if (input.includes(row[i])) {
                category = row[0];
                break;
            }
        }
    });
    // Finally I return the category
    return category
  }
}

Теперь мы можем использовать нашу пользовательскую функцию внутри ARRAYFORMULA:

=ARRAYFORMULA(MATCHCATEGORY("ENTRY COLUMN RANGE"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...