ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3958|回复: 25

[已解决] 求助:按条件提取“-”前面的数字(在字母中提取非连续数字,包含有0的情况!!)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-1-18 10:15 | 显示全部楼层 |阅读模式
各位大师:
    小弟之前发了一个求助贴,提取“-”前面的数值,用了一段时间后发现有一些缺陷,就是遇到有0的时候0都被忽略了,实际使用时要把0算在内。
下面发一下具体条件:
数据参考提取数字
TLP.ETZA15010-XX10
BGHJ1G2005-ABU95
H5T2F3000-GT不提取,非0
MHF2U0R4T11-FH411
GHR2U0R0T31-F31
JKL3G700Y78-H78
SDG00K08-FH8
RGH25H3-YUGX253
YU20T1H8J-OPG18
HRT2T40E0H3UQ-YJ3
YFE201T80F00JJ-E不提取,非0
Y115025-XX25
DS224G0-EEF240
WE25000-ER不提取,非0
B441003-DDHB3



1、提取“-”前面的3位数字
2、“-”前面不管怎么排列只提取3位数字,没有3位就取2位,没有2位就取1位
3、如果提取的三位数第一位是0,则只取后两位。
4、如果提取的三位数第一和第二位是0,则只取最后一位。
5、如果提取的三位都是0,则不提取数字。
6、这几个数字可能不是连续的,中间会隔着字母或者字符。
7、请尽量在下面的原数组公式上修改~谢谢,现在的公式是把0都跳过去了,需要把有0的情况也计算在内
RIGHT(IF(COUNT(FIND(0,REPLACE(D4,FIND("-",D4),99,""))),0,"")&SUBSTITUTE(SUM(IFERROR(--MID(REPLACE(D4,FIND("-",D4),99,""),ROW($1:$20),1),)*10^(20-ROW($1:$20))),0,""),3)

如何提取“-”前的数字,包括数字0的情况.zip

7.78 KB, 下载次数: 27

TA的精华主题

TA的得分主题

发表于 2019-1-18 10:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
提供一个Power Query的解法,供参考。左侧数据源扩展,结果表右键刷新更新。
  1. let
  2.     源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],

  3.     变 = Table.TransformColumns( 源,{},each let n=Text.End(Text.Select(Text.Split(_,"-"){0},{"0".."9"}),3)
  4.                                              in {Number.From(n)}{Byte.From(n="000")}? )
  5. in
  6.     变
复制代码
2019-01-18_103619.jpg

一并附上文件
提取数字.xlsx.zip (14.09 KB, 下载次数: 6)

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-1-18 10:45 | 显示全部楼层
直接套下老师的公式即可。=TEXT(--RIGHT(SUM(MID(0&LEFT(A2,FIND("-",A2)-1),LARGE(ISNUMBER(-MID(LEFT(A2,FIND("-",A2)-1),ROW($1:$50),1))*ROW($1:$50),ROW($1:$50))+1,1)*10^ROW($1:$50)/10),3),"0;;;")   数组

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-1-18 10:47 | 显示全部楼层
数组公式
  1. =IFERROR(1/SUM(MOD(-SMALL(-TEXT(MID(LEFT(A2,FIND("-",A2)-1),ROW($1:$99),1),ROW($1:$99)&"0[>=];;;!0"),{1,2,3}),10)*10^{0,1,2})^-1,"")
复制代码

评分

8

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-1-18 10:49 | 显示全部楼层
=TEXT(--RIGHT(TEXTJOIN(,,IF(ISNUMBER(--MID(A2,ROW(INDIRECT("1:"&FIND("-",A2)-1)),1)),MID(A2,ROW(INDIRECT("1:"&FIND("-",A2)-1)),1),"")),3),"0;;;")  新版本   数组公式

TA的精华主题

TA的得分主题

发表于 2019-1-18 10:56 | 显示全部楼层
本帖最后由 jivy1212 于 2019-1-18 10:57 编辑

没见过  "500[>=];;;!0"  这样形式的运用。。长见识。。

TA的精华主题

TA的得分主题

发表于 2019-1-18 11:01 | 显示全部楼层
膜拜各位大神=TEXT(RIGHT(TEXTJOIN("",1,IFERROR(MID(LEFT(A2,FIND("-",A2)-1),ROW($1:$100),1)*1,"")),3),"0;;;")

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-1-18 11:03 | 显示全部楼层
jivy1212 发表于 2019-1-18 10:49
=TEXT(--RIGHT(TEXTJOIN(,,IF(ISNUMBER(--MID(A2,ROW(INDIRECT("1:"&FIND("-",A2)-1)),1)),MID(A2,ROW(INDI ...

MID(A2,ROW(INDIRECT("1:"&FIND("-",A2)-1)),1))
不用if   用text直接判断,文本为空就好了

TA的精华主题

TA的得分主题

发表于 2019-1-18 11:08 | 显示全部楼层
象山海鲜 发表于 2019-1-18 11:03
MID(A2,ROW(INDIRECT("1:"&FIND("-",A2)-1)),1))
不用if   用text直接判断,文本为空就好了

谢谢指点,最近脑子乱得来。。=TEXT(--RIGHT(TEXTJOIN(,,TEXT(0&MID(A2,ROW(INDIRECT("1:"&FIND("-",A2)-1)),1),"0;0;0;")),3),"0;;;")

TA的精华主题

TA的得分主题

发表于 2019-1-18 11:15 | 显示全部楼层
新函数的比较简单。
  1. =mod(concat(text(mid(left(D3,find("-",D3)),row($1:$99),1),"0;;0;")),1000)
复制代码

评分

2

查看全部评分

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

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-20 16:48 , Processed in 0.049987 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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