Excel formula 如何使用Excel公式查找Excel字符串中最后一个字母数字字符的位置?

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

例如,在字符串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-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,--