excel学习库

excel表格_excel函数公式大全_execl从入门到精通

一个正整数逐位循环累加,直到最后变成一位数字

上面的题目是不是拗口呢?理解一下其实也不是很费解,比如100,逐位累加就是1+0+0=1,最后是1位数,结果就是1;再例如99逐位累加就是9+9=18,18不是一位数,再累加1+8=9,9是1位数,结果就是9。 还想到有一个速算的题:求10011除以9的余数。最简单的算法就是1+0+0+1+1=3,余数就是3。好了我们就按照这个思路去解决提出的问题。也就是说对于一个正整数,我们利用MOD(正整数,9)的结果就可以求出这个正整数逐位循环累加,直到最后变成一位数字的结果。 有了上述的思路我们再完善一下:如18,结果应为9,但是MOD(18,9)=0,显然是和结果不符,错误在最后的余数为0应该变为9,即可,那么修正我们的思路:结果=MOD(正整数-1,9)+1,这样就可以避免了余数为0时出现的错误了,那么就可以了吗?我们看下面的截图:为什么会出现一个错误呢?我们分析一下原因,公式本身没问题,那么我们找函数MOD的定义了,我们再次复习一下MOD函数。 MOD函数是一个求余函数,其语法为: MOD(number,divisor),即是两个数值表达式作除法运算后的余数。特别注意:在EXCEL中,MOD函数是用于返回两数相除的余数,返回结果的符号与除数(divisor)的符号相同。参数 Number 为被除数,Divisor 为除数。如果 divisor 为零,函数 MOD 返回值为#DIV/0!。说明:函数MOD可以借用函数 INT 来表示:MOD(n, d) = n - d*INT(n/d),我们再仔细的查找一下原因,收集一些资料会清楚,对于上述公式中的number与divisor的商原来有个取值范围,就是要求此数值应小于2的27次幂。哦,原来如此!9*2^27=1207959552,所以上述截图出现了错误。 那么问题来了,如何去解决这个问题呢?为此,我们引入一个indirect函数。 INDIRECT函数是 Excel 中的公式,此函数立即对引用进行计算,并显示其内容。当需要更改公式中单元格的引用,而不更改公式本身时,请使用此函数。 INDIRECT为间接引用,语法INDIRECT(ref_text,[a1])。参数Ref_text 为对单元格的引用,一种加引号,一种不加引号。 =INDIRECT("A1")——加引号,文本引用——即引用A1单元格所在的文本。 =INDIRECT(A1)——不加引号,地址引用——如果A1的值为B2,B2的值又等于11,那么返回11。 好了,不要再过多的看上面的公式了,只要知道是一种引用就可以了。 我们还需要复习一下SUMPRODUCT函数。 SUMPRODUCT函数,返回相应的数组或区域乘积的和。数组参数必须具有相同的维数,否则,函数 SUMPRODUCT 将返回错误值 #VALUE!。 语法SUMPRODUCT(array1,array2,array3, ...)Array1,array2,array3, ... 为 2 到 30 个数组,其相应元素需要进行相乘并求和。 下面来看为了实现我们的目的,需要录入的公式: =MOD(SUMPRODUCT(--(MID(A2,ROW(INDIRECT("1:" & LEN(A2))),1)))-1,9)+1 看公式的截图 公式解释:INDIRECT("1:" & LEN(A2) 返回“$1:$10” ROW(INDIRECT("1:" & LEN(A2)) 返回{1,2,3,4,5,6,7,8,9,10}数组 MID(A2,ROW(INDIRECT("1:" & LEN(A2))),1)返回—{1;2;0;7;9;5;9;5;5;5;2} SUMPRODUCT(--(MID(A2,ROW(INDIRECT("1:" & LEN(A2))),1)))-1返回45-1 MOD(SUMPRODUCT(--(MID(A2,ROW(INDIRECT("1:" & LEN(A2))),1)))-1,9)+1返回9 好了,就是说是利用了数组,回避了数组过大的问题。 看下面的输出结果:没有再出现问题,这样问题就完美的解决了。 今日内容技巧提示: 1、INDIRECT函数的引用。 2、SUMPRODUCT函数的用法。 3、MOD函数的局限。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接