我在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))
非常感谢任何帮助!
答案 0 :(得分:0)
总是喜欢string1-string2-unused
和string2
以及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
好的......一些小问题:
6 x 9
)7 x 12
被窃听(最后一个空格>修复它)module
(也是固定的)600823-002
A:A
- 搜索字符串从第1个字符开始(但它是第4个字符,没有EXP
)每个"标题"也会出错。 (那些没有* 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)