楼主 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的办法,强制文本开头。
|
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>
<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>)补一个数,而不用"&0"来牵救"-"号.</FONT></FONT></FONT><BR></FONT></P> 分段取数字.rar , 下载次数: 1 |
12楼 gouweicao78 |
9楼半夜贴错公式了,呵呵。已修改。就是"a"&$A2。 |
13楼 迅岐同心 |
好贴,顶一下,再慢慢研究! |
14楼 wshcw |
再简化到208个字符:
|
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字符:
|
27楼 lgh978 |
高手论招,太精妙了 |
28楼 fly_fu |
一個字, 絕 + 勁 |
29楼 wangg913 |
留足。学习一下。 |
30楼 fly_fu |
不可用言語來評論 只可用心去佩服 用心繼續学習高手的file |
31楼 庭院幽幽 |
可惜我不懂,学习中 |
32楼 简单 |
一路走来,佩服不已。高手过招,美不胜收。 |
33楼 hqbpk |
敬仰敬仰,如此境界,可望不可及。 |
34楼 Ericall |
还是看斑竹过招过瘾 |