LibreOffice Calc自动填充基于单元格的列表和值

时间:2016-02-16 01:08:25

标签: excel spreadsheet libreoffice openoffice-calc libreoffice-calc

我正在制作电子表格来帮助我完成个人会计。我试图在LibreOffice Calc中创建一个公式,该公式将在给定单元格中搜索许多不同的文本字符串,如果找到则返回文本字符串。

Screen shot

例如,公式应该搜索"汉堡"或者"麦当劳"在$C6然后返回" Food"到$E6。它不应该区分大小写。并且需要部分匹配字符串以及汉堡王的情况。我需要它能够搜索其他关键字并返回这些值,例如" AutoZone"并返回" Auto"和NewEgg并返回" 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","-")))

我可以创建一个不同的表并创建一个查找引用,所以另外一种方法是我需要的东西与vlookuphlookup相反,并返回任何数据的头值在给定列中匹配。

类似于:

=IF(NOT(ISNA(MATCH(A1,B3:B99))),B2,IF(NOT(ISNA(MATCH(A1,C3:C99))),c2,0))

如果A1是测试,B2C2是标题,则会在下方搜索。

非常感谢任何帮助。提前谢谢!

2 个答案:

答案 0 :(得分:2)

根据我的评论,试试这个:

=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","caf‌​e","wing","dairy","mcdonald","wendy","kfc","pizza","carl","domino","ceaser","oliv‌​e","jimmy","custard","subway","arby"},"")))>0,"Food",IF(SUM(LEN(G150)-LEN(SUBSTITUTE(LOWER(G150),{"autozone","Napa","oreilly"},"")))>0,"AUTO","-")))

这是一个数组公式,必须使用Ctrl-Shift-Enter确认。

enter image description here

答案 1 :(得分:0)

您可以使用INDEX / MATCH / VLOOKUP公式以各种方式执行此操作。只是几个警告:我使用Excel,从未使用过Libre,所以希望这有效;并且,您需要一张映射表,将MacDonalds映射到Food,Google Music to Entertainment等等(对于所有可能的情况)。

让我们假设您的屏幕截图中的映射表是A6到E9。

E10中的公式=vlookup(C10,$C$6:$E$9,3,0)

说明:它在表$ C $ 6:$ E $ 9中查找C10(汉堡王),结果是该表中的第3列(E是C的第3列,其中C10被查找)。 0会给你一个完全匹配,如果你想要部分匹配,那么在那里输入1。

注意:如果您的映射表位于列G和H(G中的服务名称和H中的服务类型)中,并且您不确定它将具有多少条目,则公式的mod为{{1} } OR =vlookup(C10,$G:$H,2,0)表示部分匹配。这里,3被2代替,因为H是G的第2列,其中将查找C10。

编辑:使用=vlookup(C10,$G:$H,2,1)VLOOKUP函数执行INDEX以获得文本的近似匹配 - 这可能是您在上次评论中看到的解决方案(?)

需要做两件事。 a。参考表条目,b。应用MATCH / INDEX函数。

A部分 - 在您的参考表中,您必须在2 * s之间输入要查找的值。您在Qn MATCH*movie*等示例中提到的方式。 这真的是让我们通过单元格引用查找的技巧。像Entertainment / Food / etc这样的相应返回值需要是他们自己的完整单词。我们假设您在G6:H26(G-lookup值,H-返回值)列中准备了此表

b部分 - 在你的手机F6中(根据你的屏幕截图),你可以尝试这个公式*wendy* 这真的只是使用INDEX / MATCH的VLOOKUP的替代公式。

由于存储在G列中的值在* s中,因此MATCH公式中的单元格C6将进行部分读取。