乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > excel操作练习题-Excel实战练习-本文函数,数字函数枚举一题解法,你这样耍过吗?

excel操作练习题-Excel实战练习-本文函数,数字函数枚举一题解法,你这样耍过吗?

作者:乔山办公网日期:

返回目录:excel表格制作

​近日接到网友的问题,每个数字有3位小数,要求将小数部分按等级的方式显示,共分成8个级别,分别为:


当小数>=0且<0.125,则小数部分等于0.125,


当小数>=0.125且<0.25 则等于0.25


当小数>=0.25 且<0.375 则等于0.375


当小数>=0.375且<0.5 则等于0.5


当小数>=0.5且<0.625则等于0.625


当小数>=0.625且<0.75则等于0.75


当小数>=0.75且<0.875则等于0.875


当小数>=0.875 且<1 则数字加1


这种有规律的数据有人叫它台阶或阶梯序列,数学里叫等差数列,对于名字你更喜欢哪个呢?其实你要说名字不重要的,具体要看怎么解决这种问题的方法?没错,不过解决的方法实在太多了,我今天就简单枚举两类,可能有16种组合解法,好了废话不多数说,上正文:


文本/数字+lookup大法

思路:首先需要创建的使用lookup的辅助表,表的结构为如下图:


辅助表的数据示意图


完成之后,我们就需要截取小数部分,然后用lookup进行等级匹配,完成后再与整数求和计算出结果;


实现方法归为文本函数和数字函数两种:


文本函数:大致分为两种:


1.截取法,虽然条件明确说有三位小数但最后一位为0的情况就会自动忽略,如果这时我们依然截取3位就会出错,为了避免这种情况的发生,需要借助格式函数text,假设数据在b2单元格,增截取小数的公式为=RIGHT(TEXT(B2,"0.000"),3),结果并非数字,需要转化数字,最简方法就是加--,负负为正,这样既不改变结果也能达到转化为数字的目的,


文本有截取功能的函数思维导图


扩展一下,如果不确定截取小数的方法需要借助find函数或serach函数定位小数点即:=--RIGHT(B2,LEN(B2)-SEARCH(".",B2))或=--RIGHT(B2,LEN(B2)-find(".",B2)),其实截取发还有mid函数可以写,有兴趣你可以尝试一下,还有扩展中的公式若解本题并不严谨,有兴趣的你可以自行补齐公式。


文本定位函数的思维导图


2.替换法:思路就是将整数和小数替换成"",剩下的部分就是小数了,用的函数为replace,为格式上的严谨性,同样采用text将数字格式化一下,公式为=--REPLACE(TEXT(B2,"0.000"),1,FIND(".",TEXT(B2,"0.000")),""),用SUBSTITUTE函数的公式写法为:=--SUBSTITUTE(TEXT(B2,"0.000"),LEFT(TEXT(B2,"0.000"),FIND(".",TEXT(B2,"0.000"))),""),文本函数提取小数部分暂告一段落,下面数字的方法。


文本函数替换能力的函数


数字方法:数字来说用于提取数字中的小数方法也有2类:


1. 取余法,使用的函数为mod取余函数,公式为=1000*mod(b2,1),好处为不用考虑即为小数的问题和数字是不是文本数字,不过它的写法也不唯一,你也可以这么写=MOD(B2*1000,1000)


2. 计算法:思路:带有小数的数字,去掉整数,要求保留几位小数,就成10的几次方,题目要求3位,✖10的3次方即:=(B2-FLOOR(B2,1))*1000或者这么写==(B2-INT(B2))*1000


整数部分和小数对应阶梯数求和:小数部分提取完成,下面就完成最步操作,将小数的数字用lookup的方法求出阶梯数,带入上面提到方法任意公式=LOOKUP(RIGHT(TEXT(B2,"0.000"),3),Sheet1!A:A,Sheet1!B:B)就能求出小数部分对应的阶梯数,最后与整数部分求和计算结果=LEFT(B2,FIND(".",B2))+(LOOKUP(--RIGHT(TEXT(B2,"0.000"),3),Sheet1!A:A,Sheet1!B:B))/1000


数字方法就稍微简单一些:=INT(B2)+LOOKUP((B2-FLOOR(B2,1))*1000,Sheet1!A:A,Sheet1!B:B)/1000,


提示:文本方法如果不带—,在lookup时会报错#N/A!,因为辅助表的里的数据都是数字,而用文本函数得到结果为文本,需要用—来转化成数字。


终极解法:floor函数

floor函数语法结构图


用floor函数:一个公式解决问题=floor(b2,0.125)+0.125;为了增加这个公式的灵活性,我们需要将0.125定义为系数名称,这样公式改为=floor(b2,系数)+系数,这样是不是更灵活呢?


其实floor函数的用法不止于此,它可以解决大部分的阶梯序列的问题,并不局限的小数,整数,以及带有小数的数字都可以,只要符合台阶序列规律,比如:将10分为4阶梯式,>=0且<2.5,返回0,>=2.5且<5,则得2.5,>=5且<7.5,则得5,>=7.5且<10则为7.5,依然定义值为2.5的系数名称,公式=if(b2<10,floor(b2,2.5),b2),如果它的结果并不是阶梯序列,哪还是老实用lookup方法吧,毕竟lookup方法比if在处理这种问题,强很多的,而且没有条件多少的限制。


这类的问题的解法基本就这些了,不过我想表达的是学的时候,可以尽量的不要给某些函数过早的下定义,这不其实文本函数也能处理数字问题,如果在工作中,因为时间或任务上并不允许你这么玩,你就老实的什么数据类型用什么的函数处理就会好很多,因为它中间过程中没有那么多额外的数据转化的要求,今天文章旨在复习之前说的一些函数,希望能给你的学习带去灵感,也希望你能学的惬意玩的开心,如果希望,欢迎关注我爱极客的小胖子,期待与你下文再见!


相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网