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

SearchAMatchingStad

希望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,""))))))

复制C25D25下来,为其他元素


MOREFUNC ADDON

  • Morefunc Addon是一个包含66个新工作表函数的免费库。
  • 这里是一些信息(由原作者)
  • 这里是我发现的最后一个工作下载链接
  • 这里是一个很好的安装步行video