基于列表和单元格值的自动填充
Autofill based on list and value of a cell
我正在制作一个电子表格来帮助我进行个人会计。我正在尝试在 LibreOffice Calc 中创建一个公式,它将在给定的单元格中搜索许多不同的文本字符串,如果找到 return 一个文本字符串。
例如,公式应在 $C6
中搜索 "burger" 或 "McDonalds",然后同样地搜索 return "Food" 至 $E6
。它不应该区分大小写。并且需要部分匹配字符串以及汉堡王的情况。我需要它能够搜索其他关键字和 return 这些值,例如 "AutoZone" 和 return "Auto" 以及 NewEgg 和 return "Electronics".
我很难找到任何类型的解决方案,我能得到的壁橱是 MATCH
公式,但是一旦我将它嵌套在 IF
中,它就无法工作.我也试过嵌套 IF
和 OR
;两者都不快乐。
示例:
=IF(OR(D10="*hulu*",D10="*netflix*",D10="*movie*",D10="*theature*",D10="*stadium*",D10="*google*music*")=1,"Entertainment",IF(OR(D10="*taco*",D10="*burger*",D10="*mcdonald*",D10="*dq*",D10="*tokyo*",D10="*wendy*",D10="*cafe*",D10="*wing*",D10="*tropical*",D10="*kfc*",D10="*olive*",D10="*caesar*",D10="*costa*vida*",D10="*Carl*",D10="*in*n*out*",D10="*golden*corral*",D10="*nija*",D10="*arby*",D10="*Domino*",D10="*Subway*",D10="*Iggy*",D10="*Pizza*Hut*",D10="*Rumbi*",D10="*Custard*",D10="*Jimmy*")=1,"Food",IF(OR(D10="*autozone*",D10="*Napa*",D10="*OREILLY*")=1,"AUTO","-")))
我可以创建一个不同的 table 并创建一个查找参考,所以另一种表达方式是我需要一些与 VLOOKUP
和 HLOOKUP
做相反的事情并且 return 给定列中匹配的任何数据的 header 值。
类似于:
=IF(NOT(ISNA(MATCH(A1,B3:B99))),B2,IF(NOT(ISNA(MATCH(A1,C3:C99))),c2,0))
如果 A1
是测试,B2
和 C2
是 header 并且它在那些下方搜索。
您可以使用 INDEX/MATCH/VLOOKUP 公式以多种方式执行此操作。只是一些注意事项:我正在使用 Excel,但从未使用过 Libre,所以希望它能起作用;并且,您将需要一个映射 table,将麦当劳映射到食物,将 Google 音乐映射到娱乐等等(对于所有可能的情况)。
假设您的屏幕截图中的映射 table 是 A6 到 E9。
E10中的公式=vlookup(C10,$C:$E,3,0)
解释:它在 table $C$6:$E$9 中查找 C10(汉堡王),结果是第 3 列(E 是从 C 开始的第 3 列,其中查找了 C10) table。 0 将为您提供完全匹配,如果您想要部分匹配,请在此处输入 1。
注意:如果您的映射 table 位于 G 和 H 列(G 中的服务名称和 H 中的服务类型),并且您不确定它会有多少条目,mod 到公式是 =vlookup(C10,$G:$H,2,0)
OR =vlookup(C10,$G:$H,2,1)
对于部分匹配。此处,3 被 2 替换,因为 H 是 G 的第 2 列,其中将查找 C10。
编辑:使用 INDEX
和 MATCH
函数执行 VLOOKUP
以获得文本的近似匹配 - 这可能是您在上一条评论中看到的解决方案(?)
有两件事需要完成。 a.Reference table 个条目,b.applying INDEX
/MATCH
函数。
a 部分 - 在您的参考 table 中,您必须在 2*s 之间输入条目才能查找值。您在 Qn *movie*
、*wendy*
等示例中提到的方式。 这就是我们通过单元格引用查找的真正诀窍。 对应的 return 值,如 Entertainment/Food/etc 需要是它们自己的完整单词。假设您在 G6:H26 列中准备了此 table(G 查找值,H-return 值)
b 部分 - 在您的单元格 F6 中(根据您的屏幕截图),您可以尝试这个公式 =INDEX($H:$H,MATCH(C6,$G:$G,0))
这真的只是使用 INDEX/MATCH.
的 VLOOKUP 的替换公式
由于您存储在 G 列中的值位于 *s 中,因此 MATCH 公式中的单元格 C6 将进行部分读取。
根据我的评论,试试这个:
=IF(SUM(LEN(G150)-LEN(SUBSTITUTE(LOWER(G150),{"hulu","netflix","movie","theater"," stadium"},"")))>0,"Entertainment",IF(SUM(LEN(G150)-LEN(SUBSTITUTE(LOWER(G150),{"burger","taco","vida","cafe","wing","dairy","mcdonald","wendy","kfc","pizza","carl","domino","ceaser","olive","jimmy","custard","subway","arby"},"")))>0,"Food",IF(SUM(LEN(G150)-LEN(SUBSTITUTE(LOWER(G150),{"autozone","Napa","oreilly"},"")))>0,"AUTO","-")))
这是一个数组公式,必须用Ctrl-Shift-Enter确认。
我正在制作一个电子表格来帮助我进行个人会计。我正在尝试在 LibreOffice Calc 中创建一个公式,它将在给定的单元格中搜索许多不同的文本字符串,如果找到 return 一个文本字符串。
例如,公式应在 $C6
中搜索 "burger" 或 "McDonalds",然后同样地搜索 return "Food" 至 $E6
。它不应该区分大小写。并且需要部分匹配字符串以及汉堡王的情况。我需要它能够搜索其他关键字和 return 这些值,例如 "AutoZone" 和 return "Auto" 以及 NewEgg 和 return "Electronics".
我很难找到任何类型的解决方案,我能得到的壁橱是 MATCH
公式,但是一旦我将它嵌套在 IF
中,它就无法工作.我也试过嵌套 IF
和 OR
;两者都不快乐。
示例:
=IF(OR(D10="*hulu*",D10="*netflix*",D10="*movie*",D10="*theature*",D10="*stadium*",D10="*google*music*")=1,"Entertainment",IF(OR(D10="*taco*",D10="*burger*",D10="*mcdonald*",D10="*dq*",D10="*tokyo*",D10="*wendy*",D10="*cafe*",D10="*wing*",D10="*tropical*",D10="*kfc*",D10="*olive*",D10="*caesar*",D10="*costa*vida*",D10="*Carl*",D10="*in*n*out*",D10="*golden*corral*",D10="*nija*",D10="*arby*",D10="*Domino*",D10="*Subway*",D10="*Iggy*",D10="*Pizza*Hut*",D10="*Rumbi*",D10="*Custard*",D10="*Jimmy*")=1,"Food",IF(OR(D10="*autozone*",D10="*Napa*",D10="*OREILLY*")=1,"AUTO","-")))
我可以创建一个不同的 table 并创建一个查找参考,所以另一种表达方式是我需要一些与 VLOOKUP
和 HLOOKUP
做相反的事情并且 return 给定列中匹配的任何数据的 header 值。
类似于:
=IF(NOT(ISNA(MATCH(A1,B3:B99))),B2,IF(NOT(ISNA(MATCH(A1,C3:C99))),c2,0))
如果 A1
是测试,B2
和 C2
是 header 并且它在那些下方搜索。
您可以使用 INDEX/MATCH/VLOOKUP 公式以多种方式执行此操作。只是一些注意事项:我正在使用 Excel,但从未使用过 Libre,所以希望它能起作用;并且,您将需要一个映射 table,将麦当劳映射到食物,将 Google 音乐映射到娱乐等等(对于所有可能的情况)。
假设您的屏幕截图中的映射 table 是 A6 到 E9。
E10中的公式=vlookup(C10,$C:$E,3,0)
解释:它在 table $C$6:$E$9 中查找 C10(汉堡王),结果是第 3 列(E 是从 C 开始的第 3 列,其中查找了 C10) table。 0 将为您提供完全匹配,如果您想要部分匹配,请在此处输入 1。
注意:如果您的映射 table 位于 G 和 H 列(G 中的服务名称和 H 中的服务类型),并且您不确定它会有多少条目,mod 到公式是 =vlookup(C10,$G:$H,2,0)
OR =vlookup(C10,$G:$H,2,1)
对于部分匹配。此处,3 被 2 替换,因为 H 是 G 的第 2 列,其中将查找 C10。
编辑:使用 INDEX
和 MATCH
函数执行 VLOOKUP
以获得文本的近似匹配 - 这可能是您在上一条评论中看到的解决方案(?)
有两件事需要完成。 a.Reference table 个条目,b.applying INDEX
/MATCH
函数。
a 部分 - 在您的参考 table 中,您必须在 2*s 之间输入条目才能查找值。您在 Qn *movie*
、*wendy*
等示例中提到的方式。 这就是我们通过单元格引用查找的真正诀窍。 对应的 return 值,如 Entertainment/Food/etc 需要是它们自己的完整单词。假设您在 G6:H26 列中准备了此 table(G 查找值,H-return 值)
b 部分 - 在您的单元格 F6 中(根据您的屏幕截图),您可以尝试这个公式 =INDEX($H:$H,MATCH(C6,$G:$G,0))
这真的只是使用 INDEX/MATCH.
由于您存储在 G 列中的值位于 *s 中,因此 MATCH 公式中的单元格 C6 将进行部分读取。
根据我的评论,试试这个:
=IF(SUM(LEN(G150)-LEN(SUBSTITUTE(LOWER(G150),{"hulu","netflix","movie","theater"," stadium"},"")))>0,"Entertainment",IF(SUM(LEN(G150)-LEN(SUBSTITUTE(LOWER(G150),{"burger","taco","vida","cafe","wing","dairy","mcdonald","wendy","kfc","pizza","carl","domino","ceaser","olive","jimmy","custard","subway","arby"},"")))>0,"Food",IF(SUM(LEN(G150)-LEN(SUBSTITUTE(LOWER(G150),{"autozone","Napa","oreilly"},"")))>0,"AUTO","-")))
这是一个数组公式,必须用Ctrl-Shift-Enter确认。