这个Excel小练习的思路有点意思!

问题如下:现在如何写实际结果的公式或者其他处理方案!

我们提供函数公式Power Query的处理方案!

本文由“壹伴编辑器”提供技术支持

一般处理思路

关于公式,我开始能想到的就是普通的思路,就是从第一个单元格开始往下找,找到第一个小数就是我们想要的其他结果的整数部分,于是写下了如下公式:

=IF((A2&0)/10=--A2,LOOKUP(1,0/(($A$2:A2&0)/10<>--$A$2:A2),INT($A$2:A2))&"."&A2,A2)

利用LOOKUP默认升序,可以查找到最后一个满足条件的特征,找到最近的小数!

这里涉及到一个知识点,那就是如何判断是否是整数!

判断整数、小数的思路分享!

那么可以换一种思路,如果你是小数,那么小数部分添加一个0和没添加是没有区别的,比如8.01 和8.010 他们是相等,但是整数 801,你添加0就是8010,显然不等,这样就可以区别开是否是整数!

本文由“壹伴编辑器”提供技术支持

第一个公式处理是没有问题,但是看上去实在是有些冗余!稍微总结一下,你会发现,如果是小数,直接等于自己,否则应该是上一个结果的整数部分作为下一个结果的整数部分!

比如74,取上一个7.89的7,而7.89的7来源于上一个7.00,那么这种就类似于循环依赖的思路来的,可以大大简化公式!

简化公式

公式:

=IF((A2&0)/10=--A2,INT(B1)&"."&A2,A2)

当然如果没有7.00这种特殊的小数情况,还可以更加简单!

=IF(MOD(A2,1),A2,INT(B1)&"."&A2)

MOD取余,这里1的余数也就是小数部分,判断是否是0,来决定是否是正数

这个判断正数的思路,无特殊情况下,可以大大简化公式!

除此之外,大家还有可能想到判断是否有小数点的思路!

=IF(COUNT(FIND(".",A2)),A2,INT(B1)&"."&A2)

但是简化的核心思路,还是在循环依赖的思路!

公式方面我们就先分享这么多,下面我们来看看Power Query如何处理!

本文由“壹伴编辑器”提供技术支持

PowerQuery M函数处理

使用的是我们刚分享过的List.Accumulate函数

E精精,公众号:Excel办公实战PowerQuery中最重要的迭代函数

let
    源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    toLs = Table.ToList( 源),
    
    //初始值 {"",{}}, 第一个存放小数的整数部分,第二参数存放结果
    res = List.Accumulate(toLs,{"",{}},(s,c)=>
            if Text.Contains(c,".") then 
                { Text.Split(c,"."){0},s{1}&{c}}
            else 
                {s{0},s{1} & {s{0} & "." & c}}){1},
    resTB = Table.FromColumns({toLs,res})
in
    resTB

处理思路:

判断是否有小数点,如果有,就把小数中的整数部分!(针对第二参数而言)

保留在第一个元素中,同时把对应的小数压缩第二个元素中,如果不是,应该取出整第一个元素拼接上小数点和当前的整数作为结果!

本文由“壹伴编辑器”提供技术支持

OK,今天我们就分享到这里,最主要还是希望大家能学会处理类似问题的思路!比如如何判断小数、判断字母等套路要适当去总结!

感谢(收藏、点赞、在看、转发),您的鼓励是小编不断创作的动力!

本文由“壹伴编辑器”提供技术支持

全部文章附件下载、海量模板分享、不限次数提问、专属答疑群都在这里

(0)

相关推荐