永洪社区

标题: 自由式表格-小计格间计算 [打印本页]

作者: Cathy_    时间: 2024-7-17 18:50
标题: 自由式表格-小计格间计算

如图,目标列到基地维度的单元格等于左侧第一列乘以左侧第三列,品类小计单元格等于该品类下各基地算出来的值求和,用格间计算
rowTotal(cidx, 2 , ridx-1)得出的效果是:第一个品类小计正确,是该品类下各基地的值求和,但是第二个品类小计不是光第二个品类下各基地的只求和,而是把第一个品类下的也加了一遍,以此类推


想实现的效果如下图,父单元格也选择了,但是好像没起作用,没有识别从哪一行开始加






作者: yhdata_ruby    时间: 2024-7-17 19:22
你试试这样写呢
var a;
for(var i=1;i<=ridx-1;i++){
    if(i==1){
        a=cell(1,cidx)
        }
    else if(cell(i,0)!="小计"&cell(i,0)!=cell(i-1,0)){
        a=cell(i,cidx)
        }
    else{
        a=a+cell(i,cidx)
        }
}
a;
作者: Cathy_    时间: 2024-7-18 09:33
yhdata_ruby 发表于 2024-7-17 19:22
你试试这样写呢
var a;
for(var i=1;i

谢谢,计算出来结果是对的,能给解释一下吗,没理解else if那块
作者: yhdata_ruby    时间: 2024-7-18 11:09
Cathy_ 发表于 2024-7-18 09:33
谢谢,计算出来结果是对的,能给解释一下吗,没理解else if那块


else if后的意思就是判断第一列对应行的字段是否和上一行单元格的字段相同并且不是“小计”,如果以上两个条件都满足,那么 a 的值将被设为 cell(i,cidx),就从这里开始重新定义a的初始值。以便于else后面a去做循环
拿图片举例,a从最开始=1的时候被赋予971的值,=2的时候去判断第一列对应的字段(二级市场)是否=小计并且与上一行字段不同,不符合的话执行a=a+cell(i,cidx),一直到i=6的时候,符合了else if 的条件,在这里a重新被赋值为1029,继续向下循环计算


作者: Cathy_    时间: 2024-7-18 14:34
yhdata_ruby 发表于 2024-7-18 11:09
else if后的意思就是判断第一列对应行的字段是否和上一行单元格的字段相同并且不是“小计”,如果以上两 ...

感谢指导,但是我这个表小计写在第二列了,第一列的小计行跟品类合并单元格了,不应该是cell(i,1)?还是说这个没关系?
另外请问,我再加一行总计,对应单元格为3个小计值求和应该怎么写,我这样改报错了
var a;
for(var i=1;i<=ridx-1;i++){
    if(i==1){
        a=cell(1,cidx)
        }
    else if(cell(i,0)="品类小计"){
        a=0
        }
    else{
        a=a+cell(i,cidx)
        }
}
a;
作者: yhdata_lyaa    时间: 2024-7-18 14:57
Cathy_ 发表于 2024-7-18 14:34
感谢指导,但是我这个表小计写在第二列了,第一列的小计行跟品类合并单元格了,不应该是cell(i,1)?还是 ...

是应该是cell(i,1)。
三个小计值求总和,直接绑定字段,不设置父级就是总计了
作者: Cathy_    时间: 2024-7-18 15:10
yhdata_lyaa 发表于 2024-7-18 14:57
是应该是cell(i,1)。
三个小计值求总和,直接绑定字段,不设置父级就是总计了 ...

不是啊
我不是要绑定字段的总计,我是要算出来的再手动sum,并不等于整体总计,要是绑定字段的总计小计就没必要格间计算了
作者: Cathy_    时间: 2024-7-18 15:13
yhdata_lyaa 发表于 2024-7-18 14:57
是应该是cell(i,1)。
三个小计值求总和,直接绑定字段,不设置父级就是总计了 ...

cell(i,1)不对,出来的小计等于上一个格子的值了
作者: Cathy_    时间: 2024-7-18 15:39
yhdata_lyaa 发表于 2024-7-18 15:33

额,这不是算总计报错了吗,所以再问问老师啊
作者: yhdata_lyaa    时间: 2024-7-18 15:42
Cathy_ 发表于 2024-7-18 15:39
额,这不是算总计报错了吗,所以再问问老师啊

现在总计算是怎么写的,报什么错了
作者: Cathy_    时间: 2024-7-18 15:47
yhdata_ruby 发表于 2024-7-18 11:09
else if后的意思就是判断第一列对应行的字段是否和上一行单元格的字段相同并且不是“小计”,如果以上两 ...

老师烦请帮忙看下,求三个小计的和
作者: 朝花夕拾    时间: 2024-7-18 15:53
那个格子直接写left(1) * left(3)不行吗
作者: Cathy_    时间: 2024-7-18 16:07
朝花夕拾 发表于 2024-7-18 15:53
那个格子直接写left(1) * left(3)不行吗

不行啊,行的话就不费这劲了
业务需求要的是手动加和的值,跟小计行left(1)*left(3)不相等 还要把算完的这俩作差呢,要是直接left(1)*left(3)差值就是0 了
作者: 朝花夕拾    时间: 2024-7-18 17:21
Cathy_ 发表于 2024-7-18 16:07
不行啊,行的话就不费这劲了
业务需求要的是手动加和的值,跟小计行left(1)*left(3)不相等 还要 ...

懂了,我研究研究
作者: 朝花夕拾    时间: 2024-7-18 17:47
我研究出来了,这里还是用rowTotal,但是需要一个格子来存放每个品类的数量,好确定rowTotal的计算范围,看图就明白了
(, 下载次数: 0)