EXCEL从字符串中截取数字(规格中取直径、长、宽、高)
由于要计算毛坯重量,要从产品规格中截取零件的直径、长、宽和高。从PDM中导出的数据中发现,设计院设置的规格不是很规范,研究方法如下:
1、外形的判断
=IF(TRIM(OR(MID(F2,1,1)="Ф",MID(F2,1,1)="∅",MID(F2,1,1)="Ø",MID(F2,1,1)="φ")),"圆料",IF(LEN(F2)-LEN(SUBSTITUTE(F2,"×",""))=2,"方料",""))
圆料是通过判断首字母是否带有直径符号,用MID(F2,1,1);
方料规格是长×宽×高,所有是否有2个×符号为判断依据,用IF(LEN(F2)-LEN(SUBSTITUTE(F2,“×”,“”))=2,将×替换成空值,然后用原字符串长度减替换后的字符串长度。
结果如下:
2、圆料直径
=IF(G2="圆料",MID(F2,2,SEARCH("×",F2,1)-2),"")
SEARCH(“×”,F2,1)-2)是查找×在字符串的位置,-2是因为用MID从第二位开始查找。
结果如下:
3、长度
=IFNA(LOOKUP(9^99,--LEFT(MID(F2,FIND(CHAR(1),SUBSTITUTE(F2,"×",CHAR(1),LEN(F2)-LEN(SUBSTITUTE(F2,"×",""))))+1,99),ROW($1:$99))),"")
圆料的长度是×后的数字,但原数据中有的规格后面还加了说明
方料的长度是第二个×后的数字,同样有的也加了说明
参考https://blog.51cto.com/snowdream/1418455和http://www.nkmyjy.com/myjy/item_12909016_526765.html
说明:
LEN(F22)-LEN(SUBSTITUTE(F22,"×",""))
:判断有几个×。
SUBSTITUTE(F22,"×",CHAR(1),LEN(F22)-LEN(SUBSTITUTE(F22,"×","")))
:用于替换最后一个×,CHAR(1)也可用任何一个特殊符号代替。
MID(F22,FIND(CHAR(1),SUBSTITUTE(F22,"×",CHAR(1),LEN(F22)-LEN(SUBSTITUTE(F22,"×",""))))+1,99)
截取从CHAR(1)+1后的字符,99只是虚数。
=IFNA(LOOKUP(9^99,--LEFT(MID(F22,FIND(CHAR(1),SUBSTITUTE(F22,"×",CHAR(1),LEN(F22)-LEN(SUBSTITUTE(F22,"×",""))))+1,99),ROW($1:$99))),"")
ROW($1:$99)是取1-99的行号,这里作用是程序生成数组{1,2,3,4,…99}
LEFT(字符串,ROW($1:$99))的是生成{a,ab,abc,abcd…}这样的数组
“-LEFT”,数字生成负数,字符则生成错误码
“–LEFT”负负得正。
LOOKUP(9^99,字符串) LOOKUP 的原理是找不到与“查找值”相等的数,它会使用“查找区域”中小于或等于 “查找值”的最大值。
其中9^99也是个虚数
IFNA的作用是有无效值则为空
最终结果如下:
注:后发现圆料中也有两个×的值,会造成取值错误,增加判断,当是圆料时,取第一个×后的数字
=IF(G2="方料",LOOKUP(9^99,--LEFT(MID(F2,FIND(CHAR(1),SUBSTITUTE(F2,"×",CHAR(1),LEN(F2)-LEN(SUBSTITUTE(F2,"×",""))))+1,99),ROW($1:$99))),IF(G2="圆料",LOOKUP(9^99,--LEFT(MID(F2,FIND(CHAR(1),SUBSTITUTE(F2,"×",CHAR(1),1))+1,99),ROW($1:$99))),""))
4、宽度
=IF(G2="方料",MID(F2,FIND("×",F2,1)+1,FIND(CHAR(1),SUBSTITUTE(F2,"×",CHAR(1),LEN(F2)-LEN(SUBSTITUTE(F2,"×",""))))-FIND("×",F2,1)-1),"")
这个用MID是从方料中截取两个×之间的值
结果如下
5、高度
=IF(G2="方料",MID(F2,1,FIND("×",F2,1)-1),"")
用MID从方料中截取第一个×前的数值
结果如下:
EXCEL从字符串中截取数字(规格中取直径、长、宽、高)相关推荐
- mysql sql 字符串字段保留数字_sql中取字符串中的数字语句_MySQL
bitsCN.com one: declare @s varchar(20) declare @i varchar(20) set @i='' set @s='新会员必须购买350元产品' while ...
- java 字符串中提取数字_java中如何提取字符串中的数字?
展开全部 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; publi ...
- python读单行文本求平均值_如何从文本文件python中的数字列表中找到平均值
在文本文件中,有一个名称列表,旁边有一个数字,表示他们在本例中的分数.有没有办法计算出文本文件中所有数字的平均值.在 代码:print("average calculator") ...
- 微信公众号文章中图片加载时,占位图宽高大小的确定
打开一篇多图的微信公众好文章.在图片加载过程中,我们发现微信对每一个img都塞了也个占位图,而且占位图的宽高就是实际加载完图的宽高.这是如何做到的呢? 1.微信所有的img标签里,都有自定义的data ...
- 安卓代码中获取dp值为控件设置宽高,获取dimen值
引言: 今天遇到一个问题,在自定义控件的时候,要求在代码中设置控件的宽高.本来自以为:对嘛,很简单,就是直接设置params //这样直接初始化的时候设置LayoutParams iconparams ...
- python字符串转化为数字-python 中判断字符串能否转换为数字类型
方法一: isdigit() 不可识别汉字 小数类型 str1 = "1" str2 = "2.1" str3 = "三" str4 = & ...
- java字符串包含连续数字,Java中包含数字的排序字符串
小编典典 尝试使用此比较器,该比较器将删除所有非数字字符,然后将其余字符与数字进行比较: Collections.sort(strings, new Comparator() { public int ...
- python提取文本中的数字_EXCEL中提取汉字、字母、数字如此简单
不啰嗦,直奔主题-- 看看如何提取,一般使用函数提取,难度较大 先看一下数据源: 分别提取数字.字母和汉字 方案1:传统函数公式法 传统的函数方式难度较大,这里只演示一下提取数字,其他不再演示 通用数 ...
- pgsql怎么从interval中取出数字_tp6中swoole扩展websocket的使用
相信不少人都已经知道tp6.0已经适配swoole.并推出think-swoole 3.0 ,这次就来介绍下tp6中swoole扩展websocket的使用. Websocket 继承与Http,进行 ...
最新文章
- python之 数据类型判定与类型转换
- dotNet中,取得指定日期所在月份的最后一天
- 【Google Play】创建并设置应用 ( 访问权限 | 内容分级 | 受众群体 | 类别及联系方式 | 商品详情 )
- ext.net TreePanel单击取值
- 决策树-熵计算-ID3算法(转)
- SQL Server 2005客户端安装和端口设置
- ultraedit26 运行的是试用模式_如何并行运行你的自动化测试?
- JS prototype作用
- mysql 查看密码_Ubuntu安装和配置MySQL数据库
- 选项卡jacascript
- C# 生成word文档(NPOI.XWPF)
- 越狱环境下代码控制手机重启(IOS,XCODE)
- Linux编辑器-vim的使用的 “打字练习“
- 微信公众平台接口API
- 高数定理、法则(持续添加)
- Python一行代码实现正三角形
- WebGIS地图相关学习笔记
- Docker的镜像制作与整套项目一键打包部署
- OSChina App代码分析二
- 调试运用(电流标幺化,PWMDAC调试,ARCTAN反正切)
热门文章
- Python3+Selenium3自动化测试框架——②流程梳理及代码封装
- 探寻宝藏 【算法设计与分析课设】 c语言代码 + 思路详解 + 三维优化
- Web网站模板-响应式个人企业照片墙展示网站模板(HTML+CSS+JavaScript)
- node.js生成条形码图片
- Mybatis————核心配置文件标签和动态常用的SQL标签
- 解决opencv中cv2.VideoCapture()函数打开USB视频慢的问题
- 岁末寄语Dian团队#8212;#8212;2007年团队年鉴编首语(转摘)
- 支付宝授权获取芝麻信用分数
- 两台主机ping不通(一台能行,一台不行)
- 集五福华为机试python_2020 春节集五福最详细收集攻略