Excel formula 如何使用Excel公式查找Excel字符串中最后一个字母数字字符的位置?
例如,在字符串VA4940--05-LAMB--、%2--中,2是最后一个字母数字字符。它在第22位。我在寻找一个返回“22”的公式Excel formula 如何使用Excel公式查找Excel字符串中最后一个字母数字字符的位置?,excel-formula,Excel Formula,例如,在字符串VA4940--05-LAMB--、%2--中,2是最后一个字母数字字符。它在第22位。我在寻找一个返回“22”的公式 感谢所有回应的人。这给了我我想要的答案,特别是老虎的。不过,所有这些都很有帮助。如果您不想要专用的VBA功能,这里有一种方法。首先: =ROW(OFFSET(F1,0,0,LEN(MyStr),1)) {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23} 作为数组公式输入(CTRL-SHIFT
感谢所有回应的人。这给了我我想要的答案,特别是老虎的。不过,所有这些都很有帮助。如果您不想要专用的VBA功能,这里有一种方法。首先:
=ROW(OFFSET(F1,0,0,LEN(MyStr),1))
{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23}
作为数组公式输入(CTRL-SHIFT-ENTER---此答案中的所有公式都将是数组公式)。如图所示,这将生成一系列整数1,2。。。LEN(MyStr),其中MyStr是目标字符串,F1可以是第1行中的任何单元格
将其嵌入MID
函数中,以在MyStr中生成单个字符数组:
=MID(UPPER(A1),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),1)
{"V";"A";"4";"9";"4";"0";"-";"-";"0";"5";"-";"L";"A";"M";"B";" ";"-";"-";",";"%";"2";"-";"-"}
UPPER
函数用于方便起见,因此无需测试小写字母字符
将其嵌入code
函数以生成ASCII码数组:
=CODE(MID(UPPER(A1),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),1))
{86;65;52;57;52;48;45;45;48;53;45;76;65;77;66;32;45;45;44;37;50;45;45}
现在确定哪些是(大写)字母。
IF
功能根据条件=code(“A”)
测试这些代码。如果该测试通过,我们将针对条件执行另一个测试,如果不想要专用的VBA函数,这里有一种方法。首先:
=ROW(OFFSET(F1,0,0,LEN(MyStr),1))
{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23}
作为数组公式输入(CTRL-SHIFT-ENTER---此答案中的所有公式都将是数组公式)。如图所示,这将生成一系列整数1,2。。。LEN(MyStr),其中MyStr是目标字符串,F1可以是第1行中的任何单元格
将其嵌入MID
函数中,以在MyStr中生成单个字符数组:
=MID(UPPER(A1),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),1)
{"V";"A";"4";"9";"4";"0";"-";"-";"0";"5";"-";"L";"A";"M";"B";" ";"-";"-";",";"%";"2";"-";"-"}
UPPER
函数用于方便起见,因此无需测试小写字母字符
将其嵌入code
函数以生成ASCII码数组:
=CODE(MID(UPPER(A1),ROW(OFFSET(F1,0,0,LEN(MyStr),1)),1))
{86;65;52;57;52;48;45;45;48;53;45;76;65;77;66;32;45;45;44;37;50;45;45}
现在确定哪些是(大写)字母。IF
功能根据条件=code(“A”)
测试这些代码。如果该测试通过,我们将针对条件替代常规公式(不需要数组条目)解决方案执行另一个测试:
=LOOKUP(2,1/(ISNUMBER(SEARCH(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),"abcdefghijklmnopqrstuvwxyz1234567890"))),ROW(INDIRECT("1:"&LEN(A1))))
另外,给定您提供的示例字符串VA4940--05-LAMB--,%2--
最后一个字母数字字符(2)位于位置21,而不是22
相同的公式,但不使用间接函数(这是一个易失函数,通常应避免使用)。此公式还假设任何给定字符串的最大长度为99或更小。如有必要,将99调高:
=LOOKUP(2,1/(ISNUMBER(SEARCH(MID(A1&REPT(" ",99),ROW($1:$99),1),"abcdefghijklmnopqrstuvwxyz1234567890"))),ROW($1:$99))
替代常规公式(不需要数组条目)解决方案:
=LOOKUP(2,1/(ISNUMBER(SEARCH(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),"abcdefghijklmnopqrstuvwxyz1234567890"))),ROW(INDIRECT("1:"&LEN(A1))))
另外,给定您提供的示例字符串VA4940--05-LAMB--,%2--
最后一个字母数字字符(2)位于位置21,而不是22
相同的公式,但不使用间接函数(这是一个易失函数,通常应避免使用)。此公式还假设任何给定字符串的最大长度为99或更小。如有必要,将99调高:
=LOOKUP(2,1/(ISNUMBER(SEARCH(MID(A1&REPT(" ",99),ROW($1:$99),1),"abcdefghijklmnopqrstuvwxyz1234567890"))),ROW($1:$99))
要查找字符串中第一个字符或最后一个字符的位置,请使用以下数组公式
:
= [First or Last] (
CHOOSE( LOOKUP( CODE( UPPER(
MID( Cll , ROW( $A$1 : INDEX( $A:$A , LEN( Cll ) , 0 )), 1))),
[Lookup Array] ), "" ,
ROW( $A$1 : INDEX( $A:$A , LEN( Cll )))))
其中:
[第一个或最后一个]:对第一个字符使用MIN
,对最后一个字符使用MAX
Cll:包含要搜索的字符串的单元格
[查找数组]:根据要查找的字符类型用于验证的数组
字符类型-分类(见图1)
数字:0到9
字母:A到Z(小写和大写)
阿尔法国际:Ž
其他字符:任何其他ASCII字符
图1
用于每种字符类型的查找数组*-与上部
功能一起使用的短数组(见图2)
数字:{1,1;48,2;58,1}
Alpha:{1,1;65,2;91,1}
阿尔法国际:{1,1;138,2;139,1;142,2;143,1;159,2;160,1;192,2;
198,1;199,2;208,1;209,2;215,1;217,2;222,1}
其他字符:{1,2;48,1;58,2;65,1;91,2;97,1;123,2;131,1;132,2;138,1;
139,2;142,1;143,2;154,1;155,2;156,1;157,2;158,1;160,2;192,1;
198,2;199,1;208,2;209,1;215,2;217,1;222,2;224,1;247,2;248,1}
图2
可以根据需要组合这些数组,例如,在本例中,问题要求查找字符串中的最后一个字母数字字符,为此,我们将使用组合的数字数组和字母数组
字符串:VA4940--05-LAMB--、%2--
对于此示例,此字符串位于单元格C21
让我们替换数组公式的参数:
[第一个或最后一个]=>MAX
Cll=>C21
[查找数组]=>'{1,1;48,2;58,1;65,2;91,1}
-字母数字
在单元格G24中输入以下数组公式:
=MAX(选择(查找(
代码(上方(中间($C21,ROW($A$1:索引($A:$A,LEN($C21),0)),1)),
{1,1;48,2;58,1;65,2;91,1}),"",
行($A$1:INDEX($A:$A,LEN($C21俬俬))
基本上,公式的作用是:
创建一个垂直数组,将字符串的每个字符分配到每一行,数组的高度由字符串的长度自动定义
MID($C21,ROW($A$1:INDEX($A:$A,LEN($C21),0)),1))
部分结果:{V,A,4,9,4,0,--