大数跨境
0
0

含有合并单元格的源数据,如何直接使用公式?

含有合并单元格的源数据,如何直接使用公式? Excel Plus---不止是Excel
2025-11-16
1
导读:合并单元格可以使报表显得比较简洁,但是如果要对含有合并单元格的源数据使用公式,往往会有一些难度,解决的方法一种
合并单元格可以使报表显得比较简洁,但是如果要对含有合并单元格的源数据使用公式,往往会有一些难度,解决的方法一种是把合并的单元格人为取消,再进行计算,那有没有不取消合并单元格,直接用公式进行运算呢?当然是有,下面就是在知乎上碰到的一个案例。
案例1:源数据中部门列是有合并单元格的,每个部门对应的姓名列各有一个“小计”,现在要根据部门提取每个部门“小计”的数值。
其实只要先找出部门所在的行数(可以使用MATCH函数),然后从B列该行至C列12行的数据区间(可以用INDIRECT函数来构建这个数据区间)里找出第一个“小计”所对应的数值,即为所求。因此可以使用公式:

=VLOOKUP("小计",

INDIRECT("B"&MATCH(E2,$A$1:$A$12,0)&":C12"),2,0)

案例2: 在案例1的基础上进行扩展,假设没有“小计”,现在要根据部门来提取各部门所对应的分数总和。
如果没有合并单元格,当然就很容易,可以使用sumif(),sumifs(),
filter(),groupby()等一众方法,当然可以使用手动的方法取消合并单元格,这个是间接的方法,以前也介绍过通过查找空白单元格进行批量填充,现在要介绍的是直接的方法。

问题的关键是通过公式的方法来创建一个没有合并单元格的源数据,这里有两个公式,一个是scan(), 前面文章中已经介绍过。

=SCAN(,A2:A12,LAMBDA(x,y,IF(y="",x,y)))

再介绍一个使用lookup()B函数的方法:
=LOOKUP(ROW(A2:A12),ROW(A2:A12)/(A2:A12>""),A2:A12)
为方便理解,这里把函数进行分解,row(A2:A12)生成一个{2,3,4,5,6,7,8,9,10,11,12}的常量数据,然后依次在查找区间里进行查找(F列,G列),以 “11”为列,为什么它的返回值是“市场部”?,lookup()函数将“11”在查找区间中查找,当然,里面没有“11”,所以下一步,它就查找比它小的数据,2,6,10都比它小,然后,它的一个特性是,如果找不到一样的,它就会查找比它小的,并且在比它小的数值当中最大的,那当然就是10的,10对应着"市场部",因此,它的返回值就是“市场部”。
以上公式当中,A2:A12反复出现,因此可以在LET函数中对A2:A12定义一个变量,将公式大大地简化。
前面是铺垫,现在要进入正题了,有了人工创建的非合并单元格列,接下来就可以使用groupby(), filter()等函数得到结果了。
方法1:
=LET(a,$A$2:$A$12,
        b,LOOKUP(ROW(a),ROW(a)/(a>""),a),
        SUM(FILTER($C$2:$C$12,b=E2)))
这个就是上面讲的,将公式进行简化,然后再使用filter函数。

方法2:

=LET(a,$A$2:$A$9,

        b,LOOKUP(ROW(a),ROW(a)/(a>""),a),

       GROUPBY(b,C2:C9,SUM,0,0))


同上面类似,不同的是使用groupby()函数。
方法3:

=LET(a,$A$2:$A$9,

        b,SCAN(,a,LAMBDA(x,y,IF(y="",x,y))),

        GROUPBY(b,C2:C9,SUM,0,0))

这里改用scan()函数进创建没有合并单元格的数据,其它的同方法2一致。

【声明】内容源于网络
0
0
Excel Plus---不止是Excel
分享20年外企供应链工作经验中关于EXCEL函数,公式,数组, VBA编程, PYTHON编程, POWER BI, POWER AUTOMATE, R语言编程等方面的实操以及技巧。
内容 44
粉丝 0
Excel Plus---不止是Excel 分享20年外企供应链工作经验中关于EXCEL函数,公式,数组, VBA编程, PYTHON编程, POWER BI, POWER AUTOMATE, R语言编程等方面的实操以及技巧。
总阅读71
粉丝0
内容44