Michi Asked: 2024-07-06 15:06:30 +0800 CST2024-07-06 15:06:30 +0800 CST 2024-07-06 15:06:30 +0800 CST 获取单元格中(文本)字符串中出现的第一个和最后一个数字 772 0 A 乙 C 1 第一个数字 最后一个数字 2 前1-5名 1 5 3 前5-10名 5 10 4 前11-15名 11 15 在 中Column B我想提取中字符串中出现的第一个数字Column A。 在 中Column C我想提取中字符串中出现的最后一个数字Column A。 我尝试应用该问题的解决方案,但它们对我的情况不起作用。 我需要哪个公式才能得到Column B和的预期结果Column C? excel 6 个回答 Voted Mayukh Bhattacharya 2024-07-06T18:24:12+08:002024-07-06T18:24:12+08:00 只有一种替代解决方案,它并不像Pb Sir很好地回答的那样短 =--TEXTSPLIT(A2,TEXTSPLIT(A2,SEQUENCE(10)-1,,1),,1) 另外,我对 不是很了解REGEX,但根据JvdV Sir 对同一主题的解决方案,我认为这可能会起作用,并且如果在编写时启用了 Office Insiders,则可以使用以下命令: =--REGEXEXTRACT(A2,"\d+",1) 或者,如果您想一次性对整个范围执行此操作: =--REGEXEXTRACT(A2:A4,"\d+"&{"","$"}) 这种方法之所以有效,是因为我们在第一列中添加了一个空字符串,在第二列中添加了一个行尾锚点,从而强制 Excel 返回两列。这样,我们将第一次出现的 1+ 位数字返回到第一列,将位于字符串末尾的 1+ 位数字返回到第二列。 REGEX如果有人发现我的答案不正确,请随意编辑,我已经做了Community Wiki P.b 2024-07-06T17:14:46+08:002024-07-06T17:14:46+08:00 =TEXTSPLIT(A2,VSTACK("-",CHAR(SEQUENCE(58,,65))),,1) 这会将文本拆分为大写或小写字符和减号(以及大写和小写字符序列之间的一些额外的未使用的字符)。 这确实是通过文字或减号: =TEXTSPLIT(UPPER(A2),CHAR(VSTACK(45,SEQUENCE(26,,65))),,1) 对于较旧的 Excel,我建议使用辅助程序或命名范围:B2 中的 Helper1:=MAX(IFERROR(FIND(CHAR(ROW($65:$90)),UPPER(A2)),0))+1 C2 中的助手 2: =FIND("-",A2) 第一个数字: =--MID(A2,B2,C2-B2) 第二个数字: =--RIGHT(A2,LEN(A2)-C2) Ron Rosenfeld 2024-07-06T20:10:20+08:002024-07-06T20:10:20+08:00 对于早期版本的 Excel: First: =MID(A2,MIN(FIND({0;1;2;3;4;5;6;7;8;9},A2&"0123456789")),FIND("-",A2)-MIN(FIND({0;1;2;3;4;5;6;7;8;9},A2&"0123456789"))) Last: =MID(A2,FIND("-",A2)+1,255) 以上代码将数字字符串返回为文本。如果您希望它们是实际数字,请在每个公式前加上双一元 ( --) 进行转换。 Best Answer Black cat 2024-07-06T15:45:08+08:002024-07-06T15:45:08+08:00 此公式接受任意长度的数字。 B20: =LET(perchar,MID(TEXTBEFORE(A20,"-"),SEQUENCE(1,LEN(TEXTBEFORE(A20,"-"))),1), TEXTJOIN("",TRUE,IF(ISNUMBER(--perchar),perchar,""))) 20. 卡巴斯基实验室=TEXTAFTER(A20,"-") nkalvi 2024-07-07T03:28:42+08:002024-07-07T03:28:42+08:00 感谢您发布这些问题来练习:) 尝试使用此方法(Microsoft 365):用空格替换所有非数字(IF(ISNUMBER(0 + c_), c_, space)并拆分。 =LAMBDA(rows_, LET( first_and_last_numbers, LAMBDA(input, LET( space, " ", split, TEXTSPLIT( TRIM( CONCAT( MAP( MID(input, SEQUENCE(LEN(input)), 1), LAMBDA(c_, IF(ISNUMBER(0 + c_), c_, space)) ) ) ), space ) + 0, IFERROR( IF( COLUMNS(split) >= 2, HSTACK(TAKE(split, , 1), TAKE(split, , -1)), EXPAND(split, , 2) ), "None" ) ) ), DROP(REDUCE("", rows_, LAMBDA(a, c, VSTACK(a, first_and_last_numbers(c)))), 1) ) )(A2:A4) Solar Mike 2024-07-06T15:23:39+08:002024-07-06T15:23:39+08:00 典型,无法抗拒挑战: LEFT(SUBSTITUTE(A2,"Top",),FIND("-",SUBSTITUTE(A2,"Top",),1)-1)*1 SUBSTITUTE(RIGHT(SUBSTITUTE(A2,"Top",),FIND("-",SUBSTITUTE(A2,"Top",),1)),"-",)*1 我没有对您给出的示例进行进一步的测试,但 3 位数字的排序留给您自己。
只有一种替代解决方案,它并不像Pb Sir很好地回答的那样短
另外,我对 不是很了解
REGEX
,但根据JvdV Sir 对同一主题的解决方案,我认为这可能会起作用,并且如果在编写时启用了 Office Insiders,则可以使用以下命令:或者,如果您想一次性对整个范围执行此操作:
这种方法之所以有效,是因为我们在第一列中添加了一个空字符串,在第二列中添加了一个行尾锚点,从而强制 Excel 返回两列。这样,我们将第一次出现的 1+ 位数字返回到第一列,将位于字符串末尾的 1+ 位数字返回到第二列。
REGEX
如果有人发现我的答案不正确,请随意编辑,我已经做了Community Wiki
这会将文本拆分为大写或小写字符和减号(以及大写和小写字符序列之间的一些额外的未使用的字符)。
这确实是通过文字或减号:
对于较旧的 Excel,我建议使用辅助程序或命名范围:B2 中的 Helper1:
=MAX(IFERROR(FIND(CHAR(ROW($65:$90)),UPPER(A2)),0))+1
C2 中的助手 2:
=FIND("-",A2)
第一个数字:
=--MID(A2,B2,C2-B2)
第二个数字:
=--RIGHT(A2,LEN(A2)-C2)
对于早期版本的 Excel:
以上代码将数字字符串返回为文本。如果您希望它们是实际数字,请在每个公式前加上双一元 (
--
) 进行转换。此公式接受任意长度的数字。
B20:
=LET(perchar,MID(TEXTBEFORE(A20,"-"),SEQUENCE(1,LEN(TEXTBEFORE(A20,"-"))),1), TEXTJOIN("",TRUE,IF(ISNUMBER(--perchar),perchar,"")))
20. 卡巴斯基实验室
=TEXTAFTER(A20,"-")
感谢您发布这些问题来练习:)
尝试使用此方法(Microsoft 365):用空格替换所有非数字(
IF(ISNUMBER(0 + c_), c_, space)
并拆分。典型,无法抗拒挑战:
我没有对您给出的示例进行进一步的测试,但 3 位数字的排序留给您自己。