ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的测验 > 函数与公式 > 用一个通用公式取得字符串中包含的所有数值

用一个通用公式取得字符串中包含的所有数值

作者:绿色风 分类: 时间:2022-08-18 浏览:135
楼主
wshcw
分段取数,要求用一个通用公式取出所有数值。分段取数挑战赛.jpg
 

分段取数挑战赛.rar
2楼
wshcw
这题也没人做,顶一下.
3楼
willin2000
要通用到什么程度呢?
w+23r[_45].67李0034.3四e3.4an:加   09减e00/53df-2:30.78ds张:三3/4f100e4r
结果+23;45;.67;0034.3;3.4; 09;00;53;-2;30.78;3;4;100;4
还是
w+2+3r[_45].67李0034.3四e3.4an:加   09减e00/5-3df-2:30.7..8ds张:三3/4f100e4r
结果+2;+3;45;.67;0034.3;3.4; 09;00;5;-3;-2;30.7;.8;3;4;100;4

第一种260个字符下可以搞定.(对数据源为空;只有数字,没有数字能纠正或正确获得;右拉到无数字时结果显示为空)
4楼
wshcw
第一种情况,写一个公式可以右拉到无数字为止.无数字为空.
5楼
闲云野鹤
B2数组公式:
=ASC(MID("A"&$A2&"A",SMALL(IF((MID("A"&$A2&"A",ROW($1:$998),1)>"9")-(MID("A"&$A2&"A",ROW($2:$999),1)>"9")=1,ROW($2:$999),56^7),COLUMN(A1)),MATCH(56^7,-MID("A"&$A2&"A",SMALL(IF((MID("A"&$A2&"A",ROW($1:$998),1)>"9")-(MID("A"&$A2&"A",ROW($2:$999),1)>"9")=1,ROW($2:$999),56^7),COLUMN(A1)),ROW($1:$999)))))
感觉挺烦的,另外,有小于CHAR(45)的字符,还不能正确判断,如果再加上这些判断的话,公式不知有多长了,所以暂时省略。
若保留全角数字的格式,可以省略ASC函数。
无论如何,算是提供一种思路吧,贵在参与,期待各位老师的精彩答案。
分段取数挑战赛.rar
6楼
wshcw
现将我的公式给各位参考:
=MID($A2,SMALL(IF((-ISERR(-(MID($A2,ROW($1:$98),1)&0)))*ISNUMBER(-(MID($A2,ROW($2:$99),1)&0)),ROW($2:$99),100),COLUMN(A1)),COUNT(-(MID($A2,SMALL(IF((-ISERR(-(MID($A2,ROW($1:$98),1)&0)))*ISNUMBER(-(MID($A2,ROW($2:$99),1)&0)),ROW($2:$99)),COLUMN(A1)),ROW($1:$15))&0)))
分段取数字.rar
7楼
wshcw
答题热情不高,也没人顶.自己顶一下.
8楼
gouweicao78
6楼公式中ISERR可以直接*ISNUMBER,而不需要(-ISERR)*ISNUMBER,省去6个字符。
另,如果A列以数字开头,不能提取第一个数字。
9楼
gouweicao78
修正数字开头的错误:
=MID($A5,SMALL(IF((-ISERR(-(MID($A5,ROW($1:$98),1)&0)))*ISNUMBER(-(MID($A5,ROW($2:$99),1)&0)),ROW($2:$99),100),COLUMN(B4)),COUNT(-(MID($A5,SMALL(IF((-ISERR(-(MID($A5,ROW($1:$98),1)&0)))*ISNUMBER(-(MID($A5,ROW($2:$99),1)&0)),ROW($2:$99)),COLUMN(B4)),ROW($1:$15))&0)))

晕,半夜居然贴错了,是下面这个:"a"&$A2的办法,强制文本开头。

  1. =MID("a"&$A2,SMALL(IF((-ISERR(-(MID("a"&$A2,ROW($1:$98),1)&0)))*ISNUMBER(-(MID("a"&$A2,ROW($2:$99),1)&0)),ROW($2:$99),100),COLUMN(A1)),COUNT(-(MID("a"&$A2,SMALL(IF((-ISERR(-(MID("a"&$A2,ROW($1:$98),1)&0)))*ISNUMBER(-(MID("a"&$A2,ROW($2:$99),1)&0)),ROW($2:$99)),COLUMN(A1)),ROW($1:$15))&0)))

10楼
gouweicao78
简化:252字
=MID("a"&$A2,SMALL((MMULT(--ISERR(-(MID("a"&$A2,ROW($1:$98)+{0,1},1)&0)),{10;1})<>10)*100+ROW($2:$99),COLUMN(A1)),COUNT(-(MID("a"&$A2,SMALL((MMULT(--ISERR(-(MID("a"&$A2,ROW($1:$98)+{0,1},1)&0)),{10;1})<>10)*100+ROW($2:$99),COLUMN(A1)),ROW($1:$15))&0)))

突破点:
1、MMULT与row+{0,1}结合;
2、常规SMALL(IF(条件,ROW,大数),row(1:1))排序法,变为:
SMALL((不满足条件)*大数+ROW),row(1:1))
减少一层嵌套,解决本题Excel2003超过7层嵌套问题


不过,看了winllin2000兄3楼的举例,这个公式的结果好像不对。而且字数似乎还是太长了。

11楼
wshcw
<P><BR><BR>简化6楼公式,没有考虑字符串以数字开头的情况.简化公式长度245字符<BR>
  1. =MID($A2,SMALL(IF((MID($A2,ROW($1:$98),1)&gt;"9")*ISNUMBER(-(MID($A2,ROW($2:$99),1)&amp;0)),ROW($2:$99),100),COLUMN(A1)),COUNT(,-MID($A2,SMALL(IF((MID($A2,ROW($1:$98),1)&gt;"9")*ISNUMBER(-(MID($A2,ROW($2:$99),1)&amp;0)),ROW($2:$99)),COLUMN(A1)),ROW($2:$16))))<BR>
优化6楼公式,考虑字符串以数字开头的情况.251字符<BR>
  1. =MID("A"&amp;$A2,SMALL(IF((MID("A"&amp;$A2,ROW($1:$98),1)&gt;"9")*(MID("A"&amp;$A2,ROW($2:$99),1)&lt;"A"),ROW($2:$99),100),COLUMN(A1)),COUNT(,-MID("A"&amp;$A2,SMALL(IF((MID("A"&amp;$A2,ROW($1:$98),1)&gt;"9")*(MID("A"&amp;$A2,ROW($2:$99),1)&lt;"A"),ROW($2:$99)),COLUMN(A1)),ROW($2:$16))))<BR>
优化10楼草版老师的公式(省略多处&amp;0,ISERR函数)237字符<BR>
  1. =MID("a"&amp;$A2,SMALL((MMULT(--(MID("a"&amp;$A2,ROW($1:$98)+{0,1},1)&gt;"9"),{10;1})&lt;&gt;10)*100+ROW($2:$99),COLUMN(A1)),COUNT(,-MID("a"&amp;$A2,SMALL((MMULT(--(MID("a"&amp;$A2,ROW($1:$98)+{0,1},1)&gt;"9"),{10;1})&lt;&gt;10)*100+ROW($2:$99),COLUMN(A1)),ROW($2:$16))))
<BR>公式中的技巧:<BR><FONT color=blue><B>1].MID($A2,ROW($1:$98),1)&gt;"9",取代ISERR(-(MID($A2,ROW($1:$98),1)&amp;0))</B></FONT><BR><FONT color=#0000ff><B>2].</B></FONT><FONT color=#000000><FONT color=navy><B>COUNT(</B><FONT size=6><FONT color=red><U><I>,</I></U></FONT></FONT><B>-MID("a"&amp;$A2,SMALL((MMULT(--(MID("a"&amp;$A2,ROW($1:$98)+{0,1},1)&gt;"9"),{10;1})&lt;&gt;10)*100+ROW($2:$99),COLUMN(A1)),ROW(<FONT size=6><FONT color=red><U>$2:$16</U></FONT></FONT>)))</B></FONT>取代COUNT(-(MID("a"&amp;$A2,SMALL((MMULT(--ISERR(-(MID("a"&amp;$A2,ROW($1:$98)+{0,1},1)&amp;0)),{10;1})&lt;&gt;10)*100+ROW($2:$99),COLUMN(A1)),ROW($1:$15))&amp;0))</FONT><BR><FONT color=magenta size=5><STRONG>公式的创新之处:</STRONG></FONT></P>
<P><FONT size=5>先回避"-"号,从<FONT color=#000080>ROW(</FONT><FONT color=red><U>$2:$16</U></FONT><FONT color=#000080>)取数,再用COUNT(<FONT color=red><U>,……</U><FONT color=#000000>)补一个数,而不用"&amp;0"来牵救"-"号.</FONT></FONT></FONT><BR></FONT></P>


分段取数字.rar
, 下载次数: 1
12楼
gouweicao78
9楼半夜贴错公式了,呵呵。已修改。就是"a"&$A2。
13楼
迅岐同心
好贴,顶一下,再慢慢研究!
14楼
wshcw
再简化到208个字符:


  1. =MID(LEFT("a"&$A2,SMALL((MMULT(--(MID($A2,ROW($1:$98)+{0,1},1)<"A"),{10;1})<>10)*100+ROW($2:$99),COLUMN(A2))),SMALL((MMULT(--(MID("a"&$A2,ROW($1:$98)+{0,1},1)>"9"),{10;1})<>10)*100+ROW($2:$99),COLUMN(A2)),15)

15楼
gouweicao78
--MID的--改为N,*100改为/1%,再省去4个字符。
16楼
yoka
再吧$拿掉{10,1},改成{-1;1} 又可以少几个字符
=MID(LEFT("a"&$A2,SMALL((MMULT(N(MID($A2,ROW($1:98)+{0,1},1)<"A"),{-1;1})>-1)/1%+ROW($2:99),COLUMN(A2))),SMALL((MMULT(N(MID("a"&$A2,ROW($1:98)+{0,1},1)>"9"),{-1;1})>-1)/1%+ROW($2:99),COLUMN(A2)),15)
17楼
wshcw
公式长度由我一开始的思路270,逐步减到现在的198个字符,公式用法上越来越精妙了.
18楼
yoka
再少几个
=MID(LEFT($A2,SMALL((MMULT(N(MID($A2,ROW($1:98)+{0,1},1)<"A"),{1;-1})<1)/1%+ROW($1:98),COLUMN(A2))),SMALL((MMULT(N(MID("a"&$A2,ROW($1:98)+{0,1},1)>"9"),{1;-1})<1)/1%+ROW($1:98),COLUMN(A2)),15)

19楼
xcd
181字符
=MID(LEFT($A2,SMALL(ISERR(-LEFT(TEXT(0&MID($A2,ROW($1:99),2),),2))*99+ROW($1:99),COLUMN(A1))),SMALL(ISERR(-RIGHT(TEXT(MID("a"&$A2,ROW($1:99),2)&0,),2))*99+ROW($1:99),COLUMN(A1)),99)
20楼
一米阳光-洋洋
楼上各位的函数脑袋,木兰望尘莫及
21楼
onthetrip
叹为观止,叹为观止
22楼
罗刚君

23楼
donghan
学习各位版主的公式
24楼
liuguansky
有":"会提取出来,有换行符,会提取空。
25楼
xyh9999
公式都用成这样了 这要多好的脑子啊 佩服......
26楼
悟空师弟
152字符:
  1. =LOOKUP(9^99,--RIGHT(LEFT($A2,LARGE(ISNUMBER(-(MID($A2,ROW($1:$98),1)&0))*ISERR(-(MID($A2&"g",ROW($2:$99),1)&0))*ROW($1:$98),4-COLUMN(A1))),ROW($1:$99)))
27楼
lgh978
高手论招,太精妙了
28楼
fly_fu
一個字, 絕 + 勁
29楼
wangg913
留足。学习一下。
30楼
fly_fu
不可用言語來評論
只可用心去佩服
用心繼續学習高手的file
31楼
庭院幽幽
可惜我不懂,学习中
32楼
简单
一路走来,佩服不已。高手过招,美不胜收。
33楼
hqbpk
敬仰敬仰,如此境界,可望不可及。
34楼
Ericall
还是看斑竹过招过瘾

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap