欢迎转发和点一下“看”,文末留言互动!

置顶公众号或设为星标及时接收更新不迷路

朋友们好,这里是EXCEL应用之家,坚持分享EXCEL操作技巧。

今天来和大家分享一道合并单元格的题目。原题目是下面这样的:

这道题目中,由于部门名称是在合并单元格中,因此就给求平均带来了巨大的苦难。

传统方法,利用LOOKUP函数将合并单元格填充,再按条件来平均。不过这种方法公式太冗长了。今天和大家分享一条公式,两段代码来解决这个问题。

01

MATCH函数法

选中单元格区域G2:G10,并输入下列公式即可。

=AVERAGE(OFFSET(D2,,,MATCH(1=0,B3:B9=0,-1)))

这条公式重复利用了MATCH函数的特点。在之前的推文中我们也曾多次介绍过这个技巧了,今天就不再赘述了。

02

字典方法

完整代码如下:

Sub 部门平均值()    Dim i%, k%, s%, arr As Variant, brr As Variant, mydic As Object    Set mydic = CreateObject("scripting.dictionary")    arr = Range("A1").CurrentRegion    ReDim brr(1 To UBound(arr) - 1, 1 To 1)    For i = 2 To UBound(arr)        If arr(i, 2) <> "" Then k = i        mydic(arr(k, 1)) = mydic(arr(k, 1)) + arr(i, 4)        s = Cells(i, 2).MergeArea.Count        If i - k + 1 = s Then            brr(k - 1, 1) = mydic(arr(k, 1)) / s        End If    Next    [G2].Resize(k, 1) = brrEnd Sub

这一小段代码的逻辑思路也非常简单。

If arr(i, 2) <> "" Then k = imydic(arr(k, 1)) = mydic(arr(k, 1)) + arr(i, 4)s = Cells(i, 2).MergeArea.Count

对在同一个个合并单元格内的单元格,都使用同样的行号,用变量k来代替变量i。这样做的原因是,直到下一个非空单元格前,变量k的值都是不变的。

利用字典来汇总同一个单元格内的数值。

利用Range对象的MergeArea属性,可以得到当前河北单元格的行高,并赋值给变量s。

If i - k + 1 = s Then  brr(k - 1, 1) = mydic(arr(k, 1)) / sEnd If

接下来就简单了。利用If语句,将总绩效除以总人数,就是当前部门的平均值了。

就是喜欢用合并单元格怎么办?没事儿有很多酷炫的解决方法!

03

循环法

完整代码如下:

Sub 部门平均值1()    Dim rng As Range    For Each rng In [B2:B10]        If rng <> "" Then           rng.Offset(, 5) = WorksheetFunction.Average( _           rng.Offset(, 2).Resize(rng.MergeArea.Count))        End If    NextEnd Sub

大音老师的手笔,实在是佩服佩服!

我就知道你“在看”

推荐阅读