如何接受 excel 公式中的 9 个第一个字符?
How to accept 9 first characters in excel formula?
我正在尝试获得这种结果,我在 sheet1 上检查是否在 sheet2 的 A 列的任何位置找到 A 列的前三个数字。如果找到数字,则在 B 列 excel 打印 Yes,如果没有找到 excel 打印 No:
Sheet 1
A B
=12300 Yes
=56700 Yes
=89200 No
Sheet 2
A
=12345
=56789
=44498
我目前在 sheet1 col B 上的公式是
=IF(ISNUMBER(MATCH(A1;Sheet2!A:A));"Yes";"No")
如何增加检查是否仅考虑两张纸中的前 3 个字符的可能性?
您可以最初尝试:
=IF(ISNUMBER(MATCH(LEFT(A1,3),LEFT(Sheet2!A1:A3,3),0)),"YES","NO")
并确保通过CtrlShiftEnter[=17=输入数组]
注意已用范围的引用,您可能想尝试使用数组公式,并且避免整列引用,因为性能问题.在这种特定情况下,我们可以通过以下方式使其动态化:
=IF(ISNUMBER(MATCH(LEFT(A1,3),LEFT(Sheet2!A1:INDEX(Sheet2!A:A,COUNTA(Sheet2!A:A)),3),0)),"YES","NO")
现在我们得到了一个动态公式,我们不妨尽量避免使用必须输入它作为数组公式。我们可以实施 INDEX
来解决这个问题:
=IF(ISNUMBER(MATCH(LEFT(A1,3),INDEX(LEFT(Sheet2!A1:INDEX(Sheet2!A:A,COUNTA(Sheet2!A:A)),3),),0)),"YES","NO")
就是这样;避免必须输入的动态数组公式 =)
如果您的值实际上以 =
开头,那么您应该使用 LEFT
引用值的前 4 个字符。并且还要考虑到您的参数是通过分号分隔的,最终公式如下所示:
=IF(ISNUMBER(MATCH(LEFT(A1;4);INDEX(LEFT(Sheet2!A1:INDEX(Sheet2!A:A;COUNTA(Sheet2!A:A));4););0));"YES";"NO")
或者,您也可以使用 SUMPRODUCT
:
=IF(SUMPRODUCT(--(LEFT(A1,3)=LEFT(Sheet2!$A:$A,3))),"Yes","No")
这个问题有很多完美的答案,但也可以通过在字符串末尾添加通配符而不是实际值来完成:
=IF(ISNUMBER(MATCH(LEFT(A1,3)&"*",Sheet2!A:A,0)),"Yes","No")
正如@JvdV 所指出的,这不适用于数值,仅适用于文本。按照他的建议:
=IF(ISNUMBER(MATCH(LEFT(A1,3)&"*",INDEX(TEXT(Sheet1!A:A,"0"),),0)),"Yes","No")
最好忽略这个问题。也请阅读他建议不要使用整个专栏作为参考的评论。
我正在尝试获得这种结果,我在 sheet1 上检查是否在 sheet2 的 A 列的任何位置找到 A 列的前三个数字。如果找到数字,则在 B 列 excel 打印 Yes,如果没有找到 excel 打印 No:
Sheet 1
A B
=12300 Yes
=56700 Yes
=89200 No
Sheet 2
A
=12345
=56789
=44498
我目前在 sheet1 col B 上的公式是
=IF(ISNUMBER(MATCH(A1;Sheet2!A:A));"Yes";"No")
如何增加检查是否仅考虑两张纸中的前 3 个字符的可能性?
您可以最初尝试:
=IF(ISNUMBER(MATCH(LEFT(A1,3),LEFT(Sheet2!A1:A3,3),0)),"YES","NO")
并确保通过CtrlShiftEnter[=17=输入数组]
注意已用范围的引用,您可能想尝试使用数组公式,并且避免整列引用,因为性能问题.在这种特定情况下,我们可以通过以下方式使其动态化:
=IF(ISNUMBER(MATCH(LEFT(A1,3),LEFT(Sheet2!A1:INDEX(Sheet2!A:A,COUNTA(Sheet2!A:A)),3),0)),"YES","NO")
现在我们得到了一个动态公式,我们不妨尽量避免使用必须输入它作为数组公式。我们可以实施 INDEX
来解决这个问题:
=IF(ISNUMBER(MATCH(LEFT(A1,3),INDEX(LEFT(Sheet2!A1:INDEX(Sheet2!A:A,COUNTA(Sheet2!A:A)),3),),0)),"YES","NO")
就是这样;避免必须输入的动态数组公式 =)
如果您的值实际上以 =
开头,那么您应该使用 LEFT
引用值的前 4 个字符。并且还要考虑到您的参数是通过分号分隔的,最终公式如下所示:
=IF(ISNUMBER(MATCH(LEFT(A1;4);INDEX(LEFT(Sheet2!A1:INDEX(Sheet2!A:A;COUNTA(Sheet2!A:A));4););0));"YES";"NO")
或者,您也可以使用 SUMPRODUCT
:
=IF(SUMPRODUCT(--(LEFT(A1,3)=LEFT(Sheet2!$A:$A,3))),"Yes","No")
这个问题有很多完美的答案,但也可以通过在字符串末尾添加通配符而不是实际值来完成:
=IF(ISNUMBER(MATCH(LEFT(A1,3)&"*",Sheet2!A:A,0)),"Yes","No")
正如@JvdV 所指出的,这不适用于数值,仅适用于文本。按照他的建议:
=IF(ISNUMBER(MATCH(LEFT(A1,3)&"*",INDEX(TEXT(Sheet1!A:A,"0"),),0)),"Yes","No")
最好忽略这个问题。也请阅读他建议不要使用整个专栏作为参考的评论。