如何通过将单元格(string)与一系列预修补程序进行匹配来返回值

我之前没有看到这个问题,所以我希望这可能是一个新的东西,让你的牙齿,并帮助我一个棘手的问题。

我有一列超过13K值的列是位置。 我们称之为列A.

这些位置不能sorting,并且是单个值和多个值的混合。 例如1A-01R或1B-04L,4C-3D,094-01F,TOR-5-A,TOR-F。

在另一列中,我已经在电子表格中列出了这些按前缀细分的位置,大约有80个不同的值。 我们称之为B栏

在列BI旁边有每个预先固定位置的描述列表,例如Bins,Racks Yard,Floor等等。让我们称这个列C.

我一直在抨击的问题是如何在列B中的预修复列表中search列A中的值,并返回C中相应的值?

看来Excel喜欢在完整值列表中search不完整的值,但是如果您尝试反转逻辑,则会出现错误。

我试过使用vlookup,索引和匹配无济于事。

一个小例子。 A = 13k +行,B = 80行,c = 80行

Column A Column B Column C Column D AREA 5 1A- RACKS Formula? = check A against range in column B and return C 094-10G 1B- RACKS 1J-H0L 1C- RACKS 099-03A 1D- RACKS 098-03C 1E- RACKS 1L-F2R 1F- RACKS 1K-L5L 1G- RACKS 1C-D5R 1H- RACKS AREA 5 1I- RACKS 1F-L4L 1J- RACKS 1F-L4L W5E- RACKS W5-E7 W5- FLOOR W5-E7 098- RACKS W5-E7 099- BINS W5E-01L AREA FLOOR 

更新1

好,根据提案,我认为我们接近了解决scheme。

我在列D中使用了下面的公式,它总是工作并返回列B中的值。

{= IFERROR(INDEX($ B $ 2:$ B $ 91,MATCH(1,COUNTIF(A2,“ ”&$ B $ 2:$ B $ 91&“ ”),0)),“”)}}

这是一个数组公式,所以我使用Ctrl + Shift + Enter。

现在我们需要做的就是获得这个公式来返回C列中的值,我想我们已经快到了。

还有一个问题可能是一个步骤,即将多个值返回给公式单元格,在列A中单元格中存储的位置不止一个的情况下。

更新2。

好吧,我们有一个工作公式,检查列A的内容与列B中的范围,并在列D中返回,存储在列C中的值! =)

数组的公式是:{= VLOOKUP(IFERROR(INDEX($ B $ 2:$ B $ 91,MATCH(1,COUNTIF(A3,“”&$ B $ 2:$ B $ 91&“”),0)),“” ),B:C,2,FALSE)}

 location pre-fix loc type W5-E3 W5-E3,W5-E4 W5-B6 W5-A4 W50-01 W5N-02R, W5-N5R,W5X-02L W5K-00R, W5-L0R W50-01 W5-C6 W5-AA01L W5-F5 W5-A4,W5-E5,W5-C3,W5-A3 W5-C5,W5-B6 W5-C1 W5H-04,W5H-03,W5-D4,W5G-00,W5-A1 W5-D7 W5V-00 

这是一个很大的问题,有可能find并返回每个实例在D列的单个单元格中列A中的单元格中find的位置?

首先你需要从列A的数据中提取前缀。 假设分隔符是空格或破折号,可以用下面的公式来做到这一点:

=LEFT(A2,IF(ISERROR(FIND("-",A2)),FIND(" ",A2)-1,FIND("-",A2)))

然后,您可以使用VLOOKUP在列Bsearch此内容并返回列C的值。 你可以在VLOOKUPembedded上面的VLOOKUP来创build一个公式:

=VLOOKUP(LEFT(A2,IF(ISERROR(FIND("-",A2)),FIND(" ",A2)-1,FIND("-",A2))),B$2:C$16,2,FALSE)

在上面的数据中,这给出了一些#N/A值 – 这些是从列A中提取的前缀不存在于列B中的列表中的位置。

  Column A Column D AREA 5 FLOOR 094-10G #N/A 1J-H0L RACKS 099-03A #N/A 098-03C #N/A 1L-F2R RACKS 1K-L5L RACKS 1C-D5R RACKS AREA 5 FLOOR 1F-L4L RACKS 1F-L4L RACKS W5-E7 #N/A W5-E7 #N/A W5-E7 #N/A W5-E7 #N/A 

更新1

好,根据提案,我认为我们接近了解决scheme。

我在列D中使用了下面的公式,它总是工作并返回列B的值。

{=IFERROR(INDEX($B$2:$B$91,MATCH(1,COUNTIF(A2,"*"&$B$2:$B$91&"*"),0)),"")}

这是一个数组公式,所以我使用ctrl + shift + enter

现在我们需要做的就是获得这个公式来返回C列中的值,我想我们已经快到了。

还有一个问题可能是一步到位,即将多个值返回给公式单元格,在列A单元格中存储的位置超过1个A

更新2。

OK,我们有一个工作公式,检查列A的内容与列B中的范围,并在列D中返回,该值存储在列C中! =)

数组的公式是:{= VLOOKUP(IFERROR(INDEX($ B $ 2:$ B $ 91,MATCH(1,COUNTIF(A3,“ ”&$ B $ 2:$ B $ 91&“ ”),0)),“” ),B:C,2,FALSE)}

 location pre-fix loc type W5-E3 W5-E3,W5-E4 W5-B6 W5-A4 W50-01 W5N-02R, W5-N5R,W5X-02L W5K-00R, W5-L0R W50-01 W5-C6 W5-AA01L W5-F5 W5-A4,W5-E5,W5-C3,W5-A3 W5-C5,W5-B6 W5-C1 W5H-04,W5H-03,W5-D4,W5G-00,W5-A1 W5-D7 W5V-00 

这是一个很大的问题,有可能find并返回每个实例在D列的单个单元格中列A中的单元格中find的位置?

只隔离A列的前缀部分,并在VLOOKUP()中使用它。 在D1中input:

 =VLOOKUP(IF(LEFT(A1,4)="AREA","AREA",MID(A1,1,FIND("-",A1))),B:C,2,FALSE) 

并抄下来:

在这里输入图像说明

OK,我们有一个工作公式,检查列A的内容与列B中的范围,并在列D中返回,该值存储在列C中! =)

数组公式是:

 {=VLOOKUP(IFERROR(INDEX($B$2:$B$91,MATCH(1,COUNTIF(A3,""&$B$2:$B$91&""),0)),""),B:C,2,FALSE)}