c++从字符串中提取数字求和_【函数应用】单元格文本内提取数字并求和

本篇的主题是将单元格内一串文本,找出所有数字并求和,如下图。

cc61f558bedbed0523fce129e1c00643.png

难度较高,新手建议仅了解下,先学会数组运用,再研究此知识点。

废话少说,步入正题。

重点说明:本篇只针对文本内整数的数字进行提取并求和,如果含小数点,此方式无效。

首先:解这道题,需要构思方法,本篇以作者的方法进行描述,思路是用LEFT函数逐步提取内容,我们以第一个文本作为例子,如下图:

95c0ed401427fa2ddeaaec7e481e5c0d.png

对于有一定水平的朋友解决上图应该不难,无非就是利用LEFT+ROW函数进行逐步提取。

原文本中明明只有14个字符,为什么要做15个呢?因为每个单元格不知道有多少个字符,宁可多不可少,也可以设置99位,只要比所有单元格中文本个数最多的那个更多即可。

有朋友会说,第14行与第15行是一样的,不会影响计算结果吗?其实不会影响,上图中我们最终的目的是将15个单元格内容从右向左进行提取,只要能对准第8行和第13行,将这两行向左提取数字的位数,数字就能被提取出来,但上图中最右侧可不止这两行是纯数字,那么我们就要一一对应,怎么对应呢?我们再看一个图。

4390bfd8dc18044dd91701f579d3dbbc.png

公式:

LEFT(A3,ROW($A$1:$A$15))

LEFT函数第一参数为文本,第二参数为右侧的提取位数时,0值返回的是错误值,第8行的数字3,和第13行的数字2,将是我们真正要提取的内容,错误值很好处理,最终形成数组去掉错误值,再用SUM函数进行求和就能得到我们最终的计算结果。

看到这里,我们能想到,核心方式就是右侧的提取位数,只要位数出来,问题就迎刃而解,我们需要利用FREQUENCY函数的频率分布,确认每个文本(非数字)之间的频率。

8653760c2454c716d3ae3383d3eff442.png

上图是频率的思路,只有8行,无法和15行进行对应,怎么才能对应呢?

我们先来拆解FREQUENCY函数每个参数得到的结果是什么。

89197b4750d66e6f423c18e3ca8419c0.png

说明:上图中描述为了更清晰,均未加绝对引用,在实际操作过程中,公式内所有区域都必须加绝对引用,否则下拉将改变区域。

公式:

ISERR(--MID(B3,ROW($A$1:$A$15),1))*ROW($A$1:$A$15)

思路:左侧得到1~15的行号,右侧A项拆分每个字符,B项使用 两个减号 转换成数字格式(文本为乱码)后,用ISERR函数判断文本逻辑值(乱码的逻辑值是TRUE),C项继续得到1~15行号,D项将B和C两项相乘,即行号顺序不变,纯数字变成0了。这样就能和拆分的文本进行一一对应,如果是文本,则按照1~15数字的顺序排列,遇到数字,则直接显示0,然后利用FREQUENCY函数,用第二参数在第一参数内逐个找频率。

83609c1b26e6540da2565c508625fd43.png

我们将得到的频率的结果,与我们理想中的结果进行对比,并用RIGHT函数对频率结果进行测试。

公式:

FREQUENCY(ROW($A$1:$A$15),ISERR(--MID(A3,ROW($A$1:$A$15),1))*ROW($A$1:$A$15))

3f12d354021a9bc61c58eddd826bfc3d.png

完全乱套了,但我们发现,1~5行频率结果有数字1,而不是0,但是我们就算是1,用RIGHT函数提取出来的也是文本字符,不影响,随便是几,只要提取出来的不是纯数字,就能满足我们的要求,6~8行是0,不管它。

整体来看,能满足我们要求的是数字4和数字3,不仅和理想结果错了一位,还比理想结果大一位,都是有规律的,错一位,我们可以将文本拆解前组合任意单字符,再来看效果。

f328ab03d25899126e82f093af38565c.png

前面加一个符号,这样就对称了。

(我们例题中最多是15位数,当加了一个字符后正好是15位,大家在实际操作过程中千万不能卡的那么准,尽量大一点,也不能大太多,因为会严重影响速度,比如预测最多有50个字符,我们可以设置成100即可)

公式:

LEFT("@"&A3,ROW($A$1:$A$15))
虽然是对称了,但是频率结果都比理想结果大1位,这样也好办,我们再到右侧组合一个空白字符即可,这里有个细节,如果直接在原文本右侧加空格,是没用的,因为第一位还是“@”,第二位还是字符“@E”,因此我们在用LEFT函数逐步提取完成后,再来组合空白字符。

(为什么是空白字符呢?因为RIGHT函数提取后,文本无法转换成数字,空白可在转换时自动去掉,数字+空白经过转换等于数值)

e569919293de02856d582bd5c7cc957d.png

每一个提取的文本后面加上一个空白字符后,频率为1的提取的都是空白,对应的数字4和数字3则提取的我们最终的数字(后面带空格)

公式:

LEFT(" "&A3,ROW($A$1:$A$15))&" "

为了方便大家复制,我们将上述中最终版公式列举出来。

左侧公式:

LEFT(" "&A3,ROW($A$1:$A$15))&" "

右侧公式:

FREQUENCY(ROW($A$1:$A$15),ISERR(--MID(A3,ROW($A$1:$A$15),1))*ROW($A$1:$A$15))

然后使用RIGHT函数进行组合组合:

RIGHT(左侧公式,右侧公式)*1

公式右侧乘1的目的是将文本数字转换成真正数字

(空白不影响,直接自动去掉了)

得到的一组数中有乱码和纯数字,再嵌套一层IFERROR函数去掉乱码,最后嵌套一层SUM函数进行求和。

最终完整版公式:

=SUM(IFERROR(RIGHT(LEFT(" "&A3,ROW($A$1:$A$15))&" ",FREQUENCY(ROW($A$1:$A$15),ISERR(MID(A3,ROW($A$1:$A$15),1)*1)*ROW($A$1:$A$15)))*1,""))

结语:

◆有的人会觉得,我可以用辅助,或者16版本的CTRL+E,又或者VBA正则去处理,我想说,函数玩的就是思路,当你水平上升到一定程度,当年看似非常难的问题,现在你可能几分钟就能解决,先苦后甜,是一样的道理;
你可以用16版快捷键,但遇到快捷键无法处理的怎么办?
你可以用辅助,如果不需要继续深入学下去,辅助是最合适的,有个段子,没有什么是IF解决不了的,辅助也同样适用,但只能局限于当前水平;
你也可以用VBA正则去处理,首先你得有VBA的水平,没有水平等于白说。
函数学到一定程度去学VBA最合适(至少VBA会调用工作表函数),如果函数基础差,甚至常用函数都不会,学VBA只会举步维艰,这是作者总结的经验,希望大家受益!
◆学而不用则殆,希望大家学习后利用到自己的工作中,哪怕是点滴的应用,也是一种进步。给自己的工作带来非常大的方便。

免费微信交流群:liuou5201314

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 网络端口全连接扫描,Linux系统下的网络端口扫描工具Nmap

Linux端口扫描工具nmap and nwatchPort scan简介port Scan的方法介绍 portScan就是一种通过检测对方服务器的开放端口,侦测对方服务器服务的方法。一般可分为主动式和被动式两种。主动式就是通过向对方服务器的特定端口发送数据包,根据应答来判断。以nma…

iphone已停用怎么解锁_两种无密码解锁iPhone锁屏密码的方法

现在很多手机都配备指纹解锁功能,大家平时用惯了指纹解锁,有时候在需要输入锁屏密码的时候反倒记不清密码是什么了。像是手机重启后就需要输入密码解锁,iPhone锁屏密码忘了怎么办?多次输入错误密码还可能导致手机被停用&#xff0…

elisa数据处理过程图解_ELISA原理示意图详解.ppt

ELISA原理示意图详解.ppt免疫酶技术及其应用——ELISA 一、实验目的 了解和掌握免疫酶技术的测定原理。 掌握酶联免疫吸附测定技术的操作步骤,学会利用竞争ELISA的方法,定量测定抗体或抗原。 了解免疫酶技术在生物学和医学研究的重要意义及应用价值。 二…

linux查找postgre进程,postgresql数据库某一个进程占用大量CPU,问题排查详解

postgresql某一个进程占用大量CPU,问题排查,目前服务器cpu为4核,内存8G1.查下是不是我们的业务SQLSELECTprocpid,START,now() - START AS lap,current_queryFROM (SELECTbackendid,pg_stat_get_backend_pid(S.backendid) AS procp…

华硕z9pa u8 bios下载_教程:图文教学,华硕M8H M8R硬破解支持intel 9代处理器

听说2020年,Intel将要上10代U了,10代U Comet Lake-S的参数整理规格如下:赛扬G5900:2核心2线程,3.4GHz奔腾G6600:2核心4线程,4.2GHz酷睿i3-10100:4核心8线程,3.6-?GHz酷睿i3-10100T&…

64位 regsrv win10_Win10 64位安装个人版SQL2000图文教程

默认Win10上是不允许安装SQL2000的,毕竟SQL2000已经是10多年前的老软件了,但是因为它成熟稳定,相比SQL2005,SQL2008R2,SQL2012,SQL2014,体积要小的多,所以还是很希望能在Win10环境下…

Java 13:切换表达式的增强功能

您可能还记得我以前的文章,在Java 12中,传统的switch语句得到了增强,因此可以用作表达式。 在Java 13中,对该功能进行了进一步的更改 。 break语句不再可以返回值。 相反,您必须使用新的yield语句,如下所示…

linux 硬盘转换gpt分区格式化吗,Linux下使用gpt给磁盘分区、格式化、挂载

GPT(GUID)分区(推荐使用)sudo parted # 进入parted工具,输入help可查看帮助select /dev/sda # 选择你要操作的设备,一定要注意,不要把默认设备误操作了mklabel gpt # 设定使用的分区类型, 如果要用MBR分区,输入msdos即可。mkpart …

苹果mp3软件_flac、WAV、m4a等音频格式转成MP3 ,一键搞定!

在工作生活中,有时我们需要处理各种音频格式转换,有些系统或者是软件不支持特殊的音频格式添加。比如说苹果手机录音格式是M4A的,flac、WAV无损音质格式或者au格式,这些都怎么转成常用的MP3格式呢?有一种快捷的方法就是…

kdj超卖_KDJ指标超卖区域划分及交易含义

超卖区,是指卖盘强盛并逐渐进人顶峰,在技术上存在反弹可能的区域。 通常情况下,将震荡区间的20线作为徘徊区和超卖区的分界线。也就是 说,当指标线的数值跌破20就算进人了超卖区。1.超卖信号的识别与超买区的划分相似,…

linux6.2 网络yum,配置RHEL6.2的YUM源

服务器端:1、 由于yum安装支持三种协议:file://、ftp://和http://,因此如果是使用本地文件作为源,则可直接使用file:\\协议,否则需要先准备好ftp或者http服务。这次测试的是ftp源,因此需要配置好ftp服务…

iphone换机数据迁移_苹果手机换华为、小米怎么同步数据?来了!

将「雷科技Lite」收藏为我的小程序,不再错过精彩内容雷科技数码3C组编辑 | MoFirLee苹果、安卓手机之间同步数据其实不算太难,难的是没有找对方法。当然,游戏数据无法互通,这里面的问题就复杂了,也是不同平台手机转换数…

一次函数的斜率公式_斜率K的公式?

展开全部k(y1-y2)/(x1-x2)。斜率亦称“角系数”,表示平面直角坐标系中表示一条直线对62616964757a686964616fe58685e5aeb931333431353339横坐标轴的倾斜程度的量。直线对X 轴的倾斜角α的正切值tgα称为该直线的“斜率”,并记作k,ktgα。规定…

java 8流自定义收集器_Java 8编写自定义收集器简介

java 8流自定义收集器Java 8引入了收集器的概念。 大多数时候,我们几乎不使用Collectors类中的工厂方法,例如collect(toList()) , toSet()或其他更有趣的方法,例如counting()或groupingBy() 。 实际上,没有多少人真正去…

spyder pyecharts不显示_165Hz+1ms仅需千元左右 优派VX2771HDPRO显示器

VX2771-HD-PRO应该是前些时间比较受欢迎的电竞显示器之一,不足千元的售价(最近价格又涨回千元以上了)就可以拥有一台165Hz的1080P显示器,性价比还真的蛮高的。国庆在家,而且最近游戏大作不断,赶紧入手一台玩一玩。一、外观赏析开箱…

linux远程安装文件,通过image文件远程安装已经配置的Linux

smallwl 于 2006-08-29 00:08:53发表:一. 制作initrd文件1. 选择操作系统,这里就用FC2.0吧.2. 安装busybox.在这里, 需要一些命令去做一些事情, 比如fdisk, ls ,mv……如果把所有这些文件都做到initrd中,这个文件会太庞大了, busybox就是为了解决这个问题的.从www.busybox.net上…

elementui表格中tip设置_VUE2.0+ElementUI2.0表格el-table:表头扩展el-tooltip

ElementUI2.0的表格的扩展:如果要实现鼠标移到表头有注释或者弹框该怎么添加呢?可以使用table的rander-header属性,render出一个el-tooltip文字提示而文字提示的内容暂存到label-class-name属性里(当然损失了label-class-name的应有功能)在el…

Java 11新字符串方法的基准

在检查Java 11的新增功能时,我发现String类有几种新方法。 所以我想用旧的做事方法和使用新方法做一个微基准测试。 这些新方法是: boolean isBlank()String strip()Stream lines()再次测试isBlank(),trim&#xff08…

与安装应用签名不同怎么解决_TCL电视下载软件后不能安装怎么办?一招教你解决...

最近,不少TCL用户都遇到了在当贝市场下载软件后不能安装的问题,那么遇到这种问题该怎么解决呢?首先我们先分析下为什么会出现这种情况!原因:这种情况大多数是因为安装包没有下载完毕或安装包破损导致的,也可能是安装包不适合在你的系统版本中安装,需要最新版本的系统。解决方法…

linux命令基本格式教程,Linux命令基本格式(详解版)

本节开始,我们不会再见到图形界面了,因为对服务器来讲,图形界面会占用更多的系统资源,而且会安装更多的服务、开放更多的端口,这对服务器的稳定性和安全性都有负面影响。其实,服务器是一个连显示器都没有的…