如何通过将单元格(字符串)与一系列预修复

时间:2015-05-14 09:34:26

标签: excel search indexing match

我之前没有见过这个问题,所以我希望这可能是一个新的东西,让我开心并帮助我解决一个棘手的问题。

我在列中有一个超过13K值的列表,这些值是位置。我们称之为A栏。

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

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

在B列旁边,我有一个每个预修复位置的描述列表,例如:垃圾箱,衣架,地板等。让我们称之为C列。

我一直在讨论的问题是,如何在B列的预修复列表中搜索A列中的值,并在C中返回相应的值?

似乎Excel喜欢在完整值列表中找到一个不完整的值,但是如果你试图颠倒逻辑,就会出错。

我尝试过使用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

好的,基于我认为我们接近解决方案的建议。

我在D列中使用了以下似乎始终有效的公式,并返回B列中的值。

{= IFERROR(INDEX($ B $ 2:$ B $ 91 MATCH(1,COUNTIF(A2," "&安培; $ B $ 2:$ B $ 91安培;&#34 ; "),0)),"")}

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

现在我们需要做的就是让这个公式返回C列中的值,我想我们差不多了。

该问题还有一个部分可能是向远的步骤,即将多个值返回到公式单元格,在这些内容中,在A列的单元格中存储了多个位置。

更新2。

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

数组公式为:{= VLOOKUP(IFERROR(INDEX)($ B $ 2:$ B $ 91,MATCH(1,COUNTIF(A3,""& $ B $ 2:$ B $ 91& amp; ;""),0)),"&#34),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

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

3 个答案:

答案 0 :(得分:1)

首先,您需要从列A中的数据中提取前缀。假设分隔符是空格或破折号,您可以使用以下公式执行此操作:

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

然后,您可以使用VLOOKUPB列中搜索此内容,并返回列C中的值。您可以在VLOOKUP中嵌入上述函数以创建单个公式:

=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

好的,基于我认为我们接近解决方案的建议。

我在列D中使用了以下似乎始终有效的公式并返回列B中的值。

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

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

现在我们需要做的就是让这个公式返回列C中的值,我想我们几乎就在那里。

该问题还有一个部分可能是向远的步骤,即将多个值返回到公式单元格,在这些内容中,列A中的单元格中存储了多个位置

更新2。

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

数组公式为:{= VLOOKUP(IFERROR(INDEX($ B $ 2:$ B $ 91,MATCH(1,COUNTIF(A3,“”&amp; $ B $ 2:$ B $ 91&amp;“< / EM> “),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

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

答案 1 :(得分:0)

只需隔离 A 列的前缀部分,然后在 VLOOKUP()中使用它。在 D1 中输入:

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

并复制下来:

enter image description here

答案 2 :(得分:0)

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

数组公式为:

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