将具有匹配条件的 table 中的匹配列 header 分配给 Google 工作表中数组公式中的字符串列表
Assign matching column header from table with match criteria to a string list in an arrayformula in Google Sheets
在 Google Sheet 中,我有第一个选项卡,其中包含 A 列中的数据条目。我想使用数组公式为 B 列中的每个条目分配一个类别。类别应该按以下方式确定:如果在第二个选项卡中,列的字符串之一与条目匹配,则列的 header 应该被指定为类别。
我感觉 query
函数应该有办法做到这一点,但我想不通。
This 是一个例子 sheet。如果解决方案需要,我很乐意稍微更改 sheet 的设置,但我想避免炸毁 sheet。我也对最简单的解决方案感兴趣。
方法
我会在这种情况下使用自定义函数,这样您就可以更好地控制 sheet 的逻辑和结构。
首先,您应该将类别 sheet 移动到行结构中,因为 Google Sheets 以这种方式获取值。
现在让我们构建从类别中提取数据并将每个名称分配给相应名称的函数。
这是一个自定义函数,所以我构建了适当的文档 header,以便它在您的 Spreadsheet 上下文中可见。
/**
* 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"))
在 Google Sheet 中,我有第一个选项卡,其中包含 A 列中的数据条目。我想使用数组公式为 B 列中的每个条目分配一个类别。类别应该按以下方式确定:如果在第二个选项卡中,列的字符串之一与条目匹配,则列的 header 应该被指定为类别。
我感觉 query
函数应该有办法做到这一点,但我想不通。
This 是一个例子 sheet。如果解决方案需要,我很乐意稍微更改 sheet 的设置,但我想避免炸毁 sheet。我也对最简单的解决方案感兴趣。
方法
我会在这种情况下使用自定义函数,这样您就可以更好地控制 sheet 的逻辑和结构。 首先,您应该将类别 sheet 移动到行结构中,因为 Google Sheets 以这种方式获取值。
现在让我们构建从类别中提取数据并将每个名称分配给相应名称的函数。
这是一个自定义函数,所以我构建了适当的文档 header,以便它在您的 Spreadsheet 上下文中可见。
/**
* 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"))