dynamic地查找两个表之间的匹配; 一个是文字,另一个是search模式
EXCEL – find两个表格之间的匹配
https://drive.google.com/folderview?id=0B2WLaA0HlUBVWnlwaFRGMmdwaVU&usp=sharing – excel文件 FILE:vraag.xlsm
我想做一个dynamic的解决scheme,从一个表中search一个文本模式,如果它也在另一个表的文本中(在不同的列)。 (dynamic的,我的意思是如果元素被添加,删除,改变)
因此,search列'元素'的文本中是否可以find'ID_type' 列中的元素 !
- 表A [ T_example ]:在一列中包含tekst(在另一个表的其中一个元素内)
- 表B [ T_rec_by_type ]:包含几个可能的string
编辑:接下来似乎是一个错误的方法 : MATCH()
=IF(ISNA(VLOOKUP(A23;T_rec_by_type[ID_type];1;FALSE));FALSE; "File found in row " & MATCH(A23;T_rec_by_type[ID_type];0))
在第一个例子(完全匹配,所以不像search模式),它的工作原理。 但这个想法是在文本中search以findsearchpattern …并通过VLOOKUP从另一列(在这个体育场中只是ID_type )返回一个值。
在线答案中find一个可能的解决scheme
EXCEL – 通过从其他工作表中search关键字来查找类别
https://drive.google.com/folderview?id=0B2WLaA0HlUBVWnlwaFRGMmdwaVU&usp=sharing – excel文件 FILE:SearchAMatchtingStad.xlsm
希望find一个解决scheme…通过这个答案我的情况下,我试了一下,但不幸的是没有成功。 那么我做错了什么? (我首先尝试了表,列和…
=IFERROR(IF(INDIRECT("Sheet1!A"&MAX(IF(ISERROR(SEARCH(CONCATENATE("*";Table1[[stad 1]:[stad 3]];"*");[@shop]))+(Table1[[stad 1]:[stad 3]]="");0;ROW(Table1[[stad 1]:[stad 3]]))))=Table2[[#Headers];[antwerpen]];[@sales];"");"Not found")
找出我的错误/问题,为什么它不工作…我只做了一个单元格,但没有运气)
= IFERROR( IF( INDIRECT("Sheet1!A" & MAX( IF( ISERROR( SEARCH("*"&Sheet1!$B$2:$D$4&"*";$B8)) + (Sheet1!$B$2:$D$4="") ; 0 ; ROW(Sheet1!$B$2:$D$4)))) = D$7;$C8; "") ; "Not found")
小提示input数组公式:按下CTRL SHIFT并回车
在某种程度上,数组公式存在一个问题
所以,当我做一对一的“search”似乎工作=SEARCH("*"&B2&"*";$B8)
但是当我做一个数组(尽pipe它仍然是一个数组,但与“\” {“genk”;“mol”;“leuven”; …} ),这似乎是一个问题,或者不按我想要的方式工作。 =SEARCH(CONCATENATE("*";OR(Table1[[stad 1]:[stad 3]]);"*");B8)
所以我给它最后的尝试。
但是与OR
或没有给出相同的结果。 为了检查这个问题是否与CONCATENATE
,我创build了一个已经实现了通配符的模拟表。
也许一件重要的事情,我忘记说ID_TYPE前面总是有一个空格。 ID_TYPE本身后跟一个数字(最多3个字符)和一个空格。
你可能不得不改变;
到,
和,
到.
根据你的地方。
@Tom夏普
感谢您的回答,但是当我尝试了它,它不起作用。 也许一件重要的事情,我忘记说ID_TYPE前面总是有一个空格。 ID_TYPE本身后跟一个数字(最多3个字符)和一个空格。
我用0 – 在默认情况下,没有find。
正确的汤姆,如果我使用'= FORMULATEXT(B35)',我看到公式被{和}包围。 所以我不明白我做错了什么。 它在你的地方工作得很好,你用我的电子表格呢? 奇怪。
我上传的文件更改为“vraag2.xlsm”
@ user3616725
也许一件重要的事情,我忘记说ID_TYPE前面总是有一个空格。 ID_TYPE本身后跟一个数字(最多3个字符)和一个空格。
将新文件放在共享文件夹:vraag2.xlsm
这是另一个不使用Regex的解决scheme。 它使用FINDtestingA1:A7(ID_type)中表格第一列中的每个元素,看它是否是A25及以下的元素的子串。 a1:a7中任何匹配单元格的行号都存储在一个数组中。 因为你想要第一个匹配,它使用MIN来find最低的行号。 如果不匹配,则存储对表格外的单元格的引用,即A8。 我正在使用FIND,因为我不想匹配小写字母,否则…“3点plafond”会与A匹配,因为它有一个“a”。
如果在(例如)d25中input数组公式,并将其拉下,则会给出表中第一个匹配单元格的行号。 如果在(例如)e25中input第二个公式并将其拉下,它将在表格的另一列(在这种情况下是列B(types))中给出对应的单元格。
结构化forms的第一个公式是:
= MIN(IF(ISERROR(FIND(T_rec_by_type [[#数据]中,[ID_TYPE],A25)),ROW(A $ 8),ROW(T_rec_by_type [[#数据]中,[ID_TYPE]])))
第二个是结构化的forms
= IFERROR(INDEX(T_rec_by_type [[#全部],[types]],D25),“未find”)
在普通的符号(我觉得有点容易)的公式是
= MIN(IF(ISERROR(FIND(A $ 2:A $ 7 A25)),ROW(A $ 8),ROW(A $ 2:A $ 7)))
和
= IFERROR(INDEX(B $ 1:B $ 7,D25),“未find”)
上面的ROW(A $ 8)是获得比表中任何行更大的行号的一种不太微妙的方式。 你可以使用任意大的数字,也可以在第一个表中添加一个总计行,并用它来获得引用。
我一直无法弄清楚为什么你的vlookup不能和表一起工作(如果我把这些单元格复制到其他地方也没关系),也许其他人可以发表评论。
使用MORFUNC ADDON的REGEX函数*
我使用了你链接到的vraag.xlsm shhet。
在单元格C25
放入: =REGEX.MID(TABLE12[[#ThisRow],[element]],MCONCAT(T_rec_by_type[ID_type],"|"),,TRUE)
这会给你第一个(最左边的)出现在相应的“元素”单元格中的“关键字”。
这几乎在那里。 但是你说“SSR”传感器比V更重要,所以如果两者都出现的话就是应该显示的那个。
这不是很漂亮,但会起作用(如果你提供了更多关于可能的“ID_type”和在“元素”字段中的东西的顺序的细节,我可能会想出更优雅的东西…):粘贴在单元格D25
:
=IF(REGEX.COMP(Table12[[#This Row],[element]],A$2,TRUE),A$2,IF(REGEX.COMP(Table12[[#This Row],[element]],A$3,TRUE),A$3,IF(REGEX.COMP(Table12[[#This Row],[element]],A$4,TRUE),A$4,IF(REGEX.COMP(Table12[[#This Row],[element]],A$5,TRUE),A$5,IF(REGEX.COMP(Table12[[#This Row],[element]],A$6,TRUE),A$6,IF(REGEX.COMP(Table12[[#This Row],[element]],A$7,TRUE),A$7,""))))))
复制C25
和D25
下来,为其他元素
MOREFUNC ADDON
- Morefunc Addon是一个包含66个新工作表函数的免费库。
- 这里是一些信息(由原作者)
- 这里是我发现的最后一个工作下载链接
- 这里是一个很好的安装步行video