子表单2对子表单1的n条数据求和

楼主
我是社区第845866位番薯,欢迎点我头像关注我哦~

知识库外链:https://t6ixa9nyl6.jiandaoyun.com/sharedoc/5U7da7Z6O9vcTnyyJvAHih

应用安装链接:https://jiandaoyun.com/a/5ea8076bcfdfea0006062a29    (‘子表单2对子表单1的多条数据求和‘表单’)

表单外链:https://slc5umd6bu.jiandaoyun.com/f/60b4862c260b6a0007c15548

 

一、问题背景

         在公路或者电缆检查,检修员会分成多次对一段作业带进行检查,每次检查检查某几个坐标范围内的作业带。此时,会在子表单1内记录每个坐标对应的作业带长度,检修员每次检查的时候填写坐标范围,比如1-2,3-6这种范围性的坐标,希望求出多次作业的总长度。具体效果可以参考下图

         已知条件:已有的坐标对应长度

         需要实现:根据作业员填写的坐标,计算总长度

二、解决思路

       针对这一场景,由于子表单1的坐标是从1、2、3按照顺序记录其对应的程度关系的,因此可以将这个长度视为一个有序的数组。根据子表单填写的范围,可以确定取子表单1的数组的哪一段数据相加,可以视为子表单1和[0,0,1,0.......]的数组2相乘,具体数组2几位数字为0哪几位数字为1,可以根据子表单2填写的范围确定。

  1. 根据子表单1确定数组1、2的长度和长度数组
  2. 根据子表单2填写的坐标范围确定数组2的哪几位为1

三、公式解读

 

 

1、区间辅助:根据子表单1的行数,确定数组2最多有几个0,并组成一个纯0的数组,比如子表单1有3行,就显示数组:0,0,0;有5行,就显示数组:0,0,0,0,0

      公式:LEFT(REPT(CONCATENATE('0,'),COUNT(子表单1.坐标)),LEN(REPT(CONCATENATE('0,'),COUNT(子表单1.坐标)))-1)

2、长度集合:子表单1内长度字段的数组

      公式:TEXT(子表单1.长度)

3、坐标范围辅助:当坐标范围只输入一个坐标的时候,把一个坐标转化成一个范围,以便后面计算方便,比如填写的坐标范围是1,“坐标范围辅助”就显示1-1;填写的是6,就显示6-6

    公式:IF(SEARCH('-',子表单.坐标范围)==0,CONCATENATE(子表单.坐标范围,'-',子表单.坐标范围),子表单.坐标范围)

4、辅助1:根据坐标范围辅助的坐标个数确定显示多少位的纯1数组,比如坐标范围辅助是1-3,“辅助1”显示为1,1,1;是2-6,'辅助1'显示为1,1,1,1

    公式:LEFT(REPT(TEXT('1,'),VALUE(SPLIT(子表单.坐标范围辅助,'-')[1])-VALUE(SPLIT(子表单.坐标范围辅助,'-')[0])+1),LEN(REPT(TEXT('1,'),VALUE(SPLIT(子表单.坐标范围辅助,'-')[1])-VALUE(SPLIT(子表单.坐标范围辅助,'-')[0])+1))-1)

5、辅助2:用“辅助1”去替换“区间辅助”的一截数组

    公式:REPLACE(区间辅助,2*VALUE(SPLIT(子表单.坐标范围辅助,'-')[0])-1,2*(VALUE(SPLIT(子表单.坐标范围辅助,'-')[1])-VALUE(SPLIT(子表单.坐标范围辅助,'-')[0]))+1,子表单.辅助1)

6、长度:用“区间辅助”和“辅助2”相乘

  公式:SUMPRODUCT(SPLIT(长度集合,','),SPLIT(子表单.辅助2,','))

7、总长度:对子表单2内的长度求和

  公式:SUM(子表单.长度)

分享扩散:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0回帖数 2关注人数 2154浏览人数
最后回复于:2022-2-28 15:14

返回顶部 返回列表