Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: 别离殇情

1

[复制链接]
发表于 2019-11-12 11:29 | 显示全部楼层
0126 发表于 2019-11-12 10:19
cutecpu老师这个我试了下去掉第一个iserr返回结果一样,这第一个iserr是预防什么的吗

厲害,兄弟真仔細

第一個 err 是預防「面积70.67方」這種case,不要抓到 67
抓到 67 的話,因為不小於 1 ,所以不會被 TEXT 過濾掉
今天剛好應用是只抓第一筆,所以前面的 70.67 會較優先
但如果今天應用像是 sum 總合的話,那 67 就是明顯誤抓
所以我還是保留第一層 iserr 的判斷 ,往前看兩個字元!

祝順心,南無阿彌陀佛!




评分

参与人数 1学分 +2 收起 理由
0126 + 2 学习了,原来是这样

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2019-11-12 14:20 | 显示全部楼层
cutecpu 发表于 2019-11-12 07:15
以下公式,總價 & 面積 都只抓第一筆

B2 陣列公式:

非常感谢!

虽然很多看不懂,但是非常好用。大大减少了我的工作量。

祝順心如意,南無阿彌陀佛!

评分

参与人数 1学分 +2 收起 理由
cutecpu + 2 不客氣喔,南無阿彌陀佛!

查看全部评分

回复

使用道具 举报

发表于 2019-11-12 14:25 | 显示全部楼层
别离殇情 发表于 2019-11-12 14:20
非常感谢!

虽然很多看不懂,但是非常好用。大大减少了我的工作量。

不客氣喔,再請您將帖子設為[已解決]喔
祝順心,南無阿彌陀佛!
回复

使用道具 举报

发表于 2019-11-12 15:12 | 显示全部楼层
凑个热闹,敬请提前准备好晕车药。。。。。
A列中如果好友多个“万”和“方”,并且左侧是文本数字,只提取最后一个目标字符左侧数字(带小数

F列位总价万,G列为平方  (如果出现“#name,表示你的excel不支持text join)

F2=TRIM(MID(TEXTJOIN(,,IF((ISERROR(MID(A2,ROW($1:$9999),1)-0))*(ISNUMBER(MID(A2,ROW($1:$9999)+1,1)-0))*(MID(A2,ROW($1:$9999),1)<>"."),MID(A2,ROW($1:$9999),1)&REPT(" ",10),MID(A2,ROW($1:$9999),1))),MAX(IF(MID(TEXTJOIN(,,IF((ISERROR(MID(A2,ROW($1:$9999),1)-0))*(ISNUMBER(MID(A2,ROW($1:$9999)+1,1)-0))*(MID(A2,ROW($1:$9999),1)<>"."),MID(A2,ROW($1:$9999),1)&REPT(" ",10),MID(A2,ROW($1:$9999),1))),ROW($1:$9999),1)="万",ROW($1:$9999),"/"))-8,8)

G2=LEFT(SUBSTITUTE(TRIM(MID(TEXTJOIN(,,IF((ISERROR(MID(TEXTJOIN(,,IF((MID(A2,ROW(1:9999),1)=".")*(ISERROR(MID(A2,ROW(1:9999)-1,1)-0)),"^",MID(A2,ROW(1:9999),1))),
ROW($1:$9999),1)-0))*(ISNUMBER(MID(TEXTJOIN(,,IF((MID(A2,ROW(1:9999),1)=".")*(ISERROR(MID(A2,ROW(1:9999)-1,1)-0)),"^",MID(A2,ROW(1:9999),1))),
ROW($1:$9999)+1,1)-0))*(MID(TEXTJOIN(,,IF((MID(A2,ROW(1:9999),1)=".")*(ISERROR(MID(A2,ROW(1:9999)-1,1)-0)),"^",MID(A2,ROW(1:9999),1))),
ROW($1:$9999),1)<>"."),MID(A2,ROW($1:$9999),1)&REPT(" ",10),MID(TEXTJOIN(,,IF((MID(A2,ROW(1:9999),1)=".")*(ISERROR(MID(A2,ROW(1:9999)-1,1)-0)),"^",MID(A2,ROW(1:9999),1))),
ROW($1:$9999),1))),MAX(IF(MID(TEXTJOIN(,,IF((ISERROR(MID(TEXTJOIN(,,IF((MID(A2,ROW(1:9999),1)=".")*(ISERROR(MID(A2,ROW(1:9999)-1,1)-0)),"^",MID(A2,ROW(1:9999),1))),
ROW($1:$9999),1)-0))*(ISNUMBER(MID(TEXTJOIN(,,IF((MID(A2,ROW(1:9999),1)=".")*(ISERROR(MID(A2,ROW(1:9999)-1,1)-0)),"^",MID(A2,ROW(1:9999),1))),
ROW($1:$9999)+1,1)-0))*(MID(TEXTJOIN(,,IF((MID(A2,ROW(1:9999),1)=".")*(ISERROR(MID(A2,ROW(1:9999)-1,1)-0)),"^",MID(A2,ROW(1:9999),1))),
ROW($1:$9999),1)<>"."),MID(A2,ROW($1:$9999),1)&REPT(" ",10),MID(TEXTJOIN(,,IF((MID(A2,ROW(1:9999),1)=".")*(ISERROR(MID(A2,ROW(1:9999)-1,1)-0)),"^",MID(A2,ROW(1:9999),1))),
ROW($1:$9999),1))),ROW($1:$9999),1)="方",ROW($1:$9999),"/"))-8,8)),"方",REPT(" ",9)),8)-0
Capture.JPG

评分

参与人数 2学分 +4 收起 理由
sub麻辣君 + 2 厉害啊,我的天
cutecpu + 2 兄弟威猛呀,只能跪著拜讀了!

查看全部评分

回复

使用道具 举报

发表于 2019-11-13 03:23 | 显示全部楼层
办公室上班休息时又继续想了一下其他的方法,根据以往CUTECPU给我的关于“4000”文本数字查询的思路,以下为其他参考方法

提取规则和限制条件
  • A列如果有多个“万”和“方”字符并且左侧为文本数字(带或不带小数),只提取数值最大的文本数字(通常首付会低过全价,所以正常情况下不会出错)
  • 以下公式是假设“万”和“方”和左侧的文本数字之间没有空格或其它非数字字符,如果有,自己将A2外围加套substitute删除非法字符
  • 以下公式是假设“万”和“方"左侧的文本字符范围是在1.01-6001,并且最后一个字符不能是0(比如200.30),并且小数最多是两位


Q2=LOOKUP(9^9,FIND(1+0.01*ROW($1:$600000)&"万",A2)^0*(1+0.01*ROW($1:$600000)))
R2=LOOKUP(9^9,FIND(1+0.01*ROW($1:$600000)&"方",A2)^0*(1+0.01*ROW($1:$600000)))


Capture.JPG
回复

使用道具 举报

发表于 2019-11-13 05:15 | 显示全部楼层
cabcyvr 发表于 2019-11-13 03:23
办公室上班休息时又继续想了一下其他的方法,根据以往CUTECPU给我的关于“4000”文本数字查询的思路,以下 ...

兄弟,讚讚讚,上班休息了還不忘這裡~~

處理的時候要注意下面:

1. 面积70.67方 ← 70.67 大於 67 ,所以 OK
2. 面积66.67方 ← 67 大於 66.67 ,所以 ....

祝順心,南無阿彌陀佛!




回复

使用道具 举报

发表于 2019-11-13 07:52 | 显示全部楼层
此问题确实存在,当小数点右侧全部数字大于左侧全部数字时会误把小数位当作整数提取,并且漏掉真正的整数,比如出现40.50,60.75时,会只显示50和75. 仅以“方“为例,修改后的公式
T2=IFERROR(MID(A2,FIND("."&LOOKUP(9^9,FIND(1+0.01*ROW($1:$600000)&"方",A2)^0*(1+0.01*ROW($1:$600000)))&"方",A2)-2,6),LOOKUP(9^9,FIND(1+0.01*ROW($1:$600000)&"方",A2)^0*(1+0.01*ROW($1:$600000)))&"方")

但还是会有缺陷,当A列中出现数字左侧为单字节句号(按照我的幼儿园老师教我的内容应该为逗号),就会出现将非数字提取的现象,毕竟是少数,不想花时间去改了。如前所述,仅供参考。
Capture.JPG

评分

参与人数 1学分 +2 收起 理由
cutecpu + 2 精神可嘉!

查看全部评分

回复

使用道具 举报

发表于 2019-11-13 14:15 | 显示全部楼层
本帖最后由 cutecpu 于 2019-11-13 19:31 编辑
cabcyvr 发表于 2019-11-13 07:52
此问题确实存在,当小数点右侧全部数字大于左侧全部数字时会误把小数位当作整数提取,并且漏掉真正的整数, ...

兄弟的實驗精神實在讓人敬佩,只能給讚了{:9_305:}

補充一下其實除了当A列中出现数字左侧为单字节句号會多提取非數字以外:
a. 比較可能會出現的情型是:「面积8.9方」,就會多提取非數字了 → 积8.9方
b. 如果是「6.9方车库卖20万」: 因為前面 MID 會錯誤的關係,導致後面誤抓成 9

祝順心,南無阿彌陀佛!








回复

使用道具 举报

发表于 2019-11-14 11:12 | 显示全部楼层
cutecpu 发表于 2019-11-13 14:15
兄弟的實驗精神實在讓人敬佩,只能給讚了

補充一下其實除了当A列中出现数字左侧为单字节句号 ...

大侠说的没错,毕竟A列的输入基本上没有什么规则可言。之前的公式是根据一些“常理”写的,比如很少有递过10(整数位是1位的)平方的房子,有也是少数,个别现象就不想再去深究了。真的要的话,可以用先把A列用substitute去除所有空格,再用text join将本身为非数字的字符(右侧为数字左侧为非数字)右侧添加几个连续空格。比如“AAA.6.5方”,会改为“AAA.     6.5方”,加上之前的MID就不会多提取。但是不想再去修改了。
回复

使用道具 举报

发表于 2019-11-14 11:33 | 显示全部楼层
本帖最后由 cutecpu 于 2019-11-14 11:41 编辑
cabcyvr 发表于 2019-11-14 11:12
大侠说的没错,毕竟A列的输入基本上没有什么规则可言。之前的公式是根据一些“常理”写的,比如很少有递 ...

兄弟,
因為您那麼認真的分享
所以我也很認真的review
您清楚所有可能的edge case就可以了
其實收獲最大的還是您,其他人不太會看了
至於有沒有要深究或完善,那就看個人了
加油! {:9_305:}
祝順心,南無阿彌陀佛!




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-19 16:35 , Processed in 0.436460 second(s), 18 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表