如何使用公式从基于文本匹配的字符串中获取字符后的值?
How to get a value after a character, from a string based on a text match using formula?
我得到以下值:
tradicional;cropped;mullet
在单元格 A1
中,我可以在 tradicional, cropped and mullet
之间进行选择。在单元格 A2
中,我选择 1
或 2
.
如果我选择 cropped
和 2,返回的值将是 10。
如果我选择 mullet
和 1,返回的值将是 5。
如果
我会选择 len
和 left
,但我不明白使用匹配条件这将如何工作。
这是一个实际的例子:https://docs.google.com/spreadsheets/d/1dFzXmtKj15EzApTKUKv8yF7_mAIB1COPSgMLMMmFE4E/edit?usp=sharing
感谢您的帮助。
描述
您可以在分号“;”上拆分文本字符串分为 3 个部分。根据您选择的部分,您可以将其拆分为美元符号“$”,然后您可以获得“item”和 return 一个整数。我把它留给你去弄清楚如何融入你的脚本。
脚本(测试用例)
function makeAChoice() {
try {
console.log("You chose "+getChoice("cropped",2));
console.log("You chose "+getChoice("mullet",1));
console.log("You chose "+getChoice("somethingelse",1));
}
catch(err) {
console.log(err);
}
}
function getChoice(choice,item) {
try {
var text = "tradicional;cropped;mullet";
text = text.split(";");
text = text.filter( s => s.includes(choice) );
if( text.length < 1 ) throw "Error choice ["+choice+"] not found!";
text = text[0].split("$");
return parseInt(text[item]);
}
catch(err) {
console.log(err);
}
}
Console.log
8:32:38 AM Notice Execution started
8:32:38 AM Info You chose 10
8:32:38 AM Info You chose 5
8:32:38 AM Info Error choice [somethingelse] not found!
8:32:38 AM Info You chose undefined
8:32:38 AM Notice Execution completed
参考
根据我对您原来 post 的评论,我觉得您的更大目标还有很多我们不知道的地方。但由于您无法提供,此解决方案将适用于您的一个确切示例。
将下面的公式放在C4中:
=ArrayFormula(IFERROR(VLOOKUP(A4;SPLIT(FLATTEN(SPLIT(E4;";"));"$");B4+1;FALSE)))
(请参阅新的 sheet“Erik 帮助”。)
内部 SPLIT
在每个分号处拆分 E4 字符串。
FLATTEN
将所有内容发送到一列。
外面的 SPLIT
然后在每个 "$" 处分裂。
VLOOKUP
然后可以尝试在生成的虚拟图表的第一列中找到 Col-A 项。如果找到,它将 return 匹配 Col-B 值 + 1 的列值(因为虚拟数组的第 1 列是标签,例如 'tradicional,' 等)。
如果 Col-A 和 Col-B 数据均未找到匹配项,则 IFERROR
return 为空值。
我得到以下值:
tradicional;cropped;mullet
在单元格 A1
中,我可以在 tradicional, cropped and mullet
之间进行选择。在单元格 A2
中,我选择 1
或 2
.
如果我选择 cropped
和 2,返回的值将是 10。
如果我选择 mullet
和 1,返回的值将是 5。
如果
我会选择 len
和 left
,但我不明白使用匹配条件这将如何工作。
这是一个实际的例子:https://docs.google.com/spreadsheets/d/1dFzXmtKj15EzApTKUKv8yF7_mAIB1COPSgMLMMmFE4E/edit?usp=sharing
感谢您的帮助。
描述
您可以在分号“;”上拆分文本字符串分为 3 个部分。根据您选择的部分,您可以将其拆分为美元符号“$”,然后您可以获得“item”和 return 一个整数。我把它留给你去弄清楚如何融入你的脚本。
脚本(测试用例)
function makeAChoice() {
try {
console.log("You chose "+getChoice("cropped",2));
console.log("You chose "+getChoice("mullet",1));
console.log("You chose "+getChoice("somethingelse",1));
}
catch(err) {
console.log(err);
}
}
function getChoice(choice,item) {
try {
var text = "tradicional;cropped;mullet";
text = text.split(";");
text = text.filter( s => s.includes(choice) );
if( text.length < 1 ) throw "Error choice ["+choice+"] not found!";
text = text[0].split("$");
return parseInt(text[item]);
}
catch(err) {
console.log(err);
}
}
Console.log
8:32:38 AM Notice Execution started
8:32:38 AM Info You chose 10
8:32:38 AM Info You chose 5
8:32:38 AM Info Error choice [somethingelse] not found!
8:32:38 AM Info You chose undefined
8:32:38 AM Notice Execution completed
参考
根据我对您原来 post 的评论,我觉得您的更大目标还有很多我们不知道的地方。但由于您无法提供,此解决方案将适用于您的一个确切示例。
将下面的公式放在C4中:
=ArrayFormula(IFERROR(VLOOKUP(A4;SPLIT(FLATTEN(SPLIT(E4;";"));"$");B4+1;FALSE)))
(请参阅新的 sheet“Erik 帮助”。)
内部 SPLIT
在每个分号处拆分 E4 字符串。
FLATTEN
将所有内容发送到一列。
外面的 SPLIT
然后在每个 "$" 处分裂。
VLOOKUP
然后可以尝试在生成的虚拟图表的第一列中找到 Col-A 项。如果找到,它将 return 匹配 Col-B 值 + 1 的列值(因为虚拟数组的第 1 列是标签,例如 'tradicional,' 等)。
如果 Col-A 和 Col-B 数据均未找到匹配项,则 IFERROR
return 为空值。