如何从2个部分匹配查找返回交叉值?指数/匹配

时间:2015-11-18 15:39:24

标签: excel excel-formula

我在excel工作表中有两个表。我正在尝试从同一工作簿中另一个表的数据中收集产品信息。第一个表是我使用产品部件号构建的产品数据Feed。这些部件号包括产品的变量(在这种情况下是长度和宽度)。在另一张纸上,我在标题栏中有部分编号,标题行中有粗略尺寸。交叉点给出最终尺寸,这是我试图在工作表1上收集的数据。我一直在尝试使用索引/匹配公式来解决问题,但由于第二张纸上只有部分零件编号,查找尚无定论。我知道查找值支持通配符,但似乎我需要在查找数组中进行某种通配符搜索。

表1列A“EXP81285-150-11 x 14-Flat”

上的示例产品名称

第2页A栏“EXP81285-150”上的产品名称示例 第2页第1行“11 x 14”

的粗略尺寸示例

这是我到目前为止所做的:

=INDEX('sheet 2'!$A$1:$L$87,MATCH($A3,'sheet 2'!$A:$A,0),MATCH($A3,'sheet 2'!$1:$1,0))

表1 http://i.imgur.com/WIA4ioM.png

表2 http://i.imgur.com/6vUXrv4.png

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

总是喜欢string1-string2-unusedstring2以及unused并不包含" - "你可以得到第一个字符串:

*updated due to misunderstanding*
=MID(A3,4,FIND("|",SUBSTITUTE(A3,"-","|",LEN(A3)-LEN(SUBSTITUTE(A3,"-",""))-1))-4)

虽然string2是一个公式的地狱:

=MID(A3,FIND("|",SUBSTITUTE(A3,"-","|",LEN(A3)-LEN(SUBSTITUTE(A3,"-",""))-1))+1,FIND("|",SUBSTITUTE(A3,"-","|",LEN(A3)-LEN(SUBSTITUTE(A3,"-",""))))-FIND("|",SUBSTITUTE(A3,"-","|",LEN(A3)-LEN(SUBSTITUTE(A3,"-",""))-1))-1)

假设最后一部分总是在Q3中:

=MID(SUBSTITUTE($A3,"-"&$Q3,""),FIND("|",SUBSTITUTE($A3,"-","|",LEN($A3)-LEN(SUBSTITUTE($A3,"-",""))-1))+1,99)

你也可以在第二部分使用arrayformula,如:

=MID(SUBSTITUTE($A3,"-"&$Q3,""),LARGE((MID($A3,ROW($1:$99),1)="-")*ROW($1:$99),2)+1,99)
  

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

(第二个公式可以更快地工作)
你可以在反向Match中使用数组公式,但是......即使有一个公式也会有很多转换,这会使计算速度降低~2-5秒。

你最好像以下一样使用VBA:
(在模块中)

Public Function MATCH2(str As String, rng As Range) As Long
  Dim i As Long, var1 As Variant
  i = 0
  For Each var1 In rng
    i = i + 1
    If InStr(str, var1.Value) Then MATCH2 = i: Exit Function
  Next
End Function

然后使用您的公式:

=INDEX('sheet 2'!$A$1:$L$87,MATCH2($A3,'sheet 2'!$A:$A,0),MATCH2($A3,'sheet 2'!$1:$1,0))

编辑 2015-11-19

好的......一些小问题:

  1. 某些尺寸不存在(如6 x 9
  2. 尺寸7 x 12被窃听(最后一个空格>修复它)
  3. 该功能需要在module(也是固定的)
  4. 还有一些项目不像600823-002
  5. 那样存在
  6. 关于公式的误解(在VBA版本中没有关系)>所有asumed A:A - 搜索字符串从第1个字符开始(但它是第4个字符,没有EXP
  7. 每个"标题"也会出错。 (那些没有* x *但那应该没问题的那些)

    You can download the updated workbook here
    如果您仍有疑问,请询问:)

答案 1 :(得分:0)

这是一个使用vlookup:

=VLOOKUP(LEFT(A2,FIND("-",A2,10)-1),Sheet2!A:L,MATCH(MID(A2,FIND("-",A2,10)+1,(FIND("-",A2,15))-(FIND("-",A2,10)+1)),Sheet2!A1:L1,0),FALSE)

但我同意Dirk的说法,这可以用vba更快地完成,也可能更准确。

编辑,我意识到我在公式中对10和15的口述不起作用,我已经修复了它,但它是基于零件号在零件名称中只有1而且只有1“ - ”。警告它很长。

=VLOOKUP(LEFT(A2,FIND("-",A2,FIND("-",A2,1)+1)-1),Sheet2!A:L,MATCH(MID(A2,FIND("-",A2,FIND("-",A2,1)+1)+1,(FIND("-",A2,FIND("-",A2,FIND("-",A2,FIND("-",A2,1)+1))+1))-(FIND("-",A2,FIND("-",A2,1)+1)+1)),Sheet2!A1:L1,0),FALSE)