Excel教程:汇总数据时,统计名称和实际名称不一致怎么办?
作者:柳之来源:部落窝教育发布时间:2022-06-24 11:31:18点击:3751
编按:
哈喽,大家好,今天来给大家讲一个数据汇总的问题,这个问题有点特别,即实际名称与统计名称并不一致,我们应该如何处理呢?本文将给大家分享3种方法,感兴趣的同学赶紧来看一看吧!
如图所示,我们要将原始的数据表汇总统计后,形成右边的统计表。
有个头疼的问题是:两个表中的名称是不一致的,比如原始销售区域中的上海大区,对应的是统计表中的华中大区;原始物料名称的燃气灶具,对应的是统计表中的灶具。
1、使用辅助列
这个问题的关键在于,我们需要形成一个对照表。
根据需求,分别是区域对照表,和物料对照表,我们来看一下效果。
整理出这两个表以后,大家是不是有点头绪了呢?
首先,我们用两个辅助列,先用VLOOKUP函数,把原始地区,和原始物料转化为统计的地区名称和统计的物料名称。
在D2输入公式:=VLOOKUP(A2,对照表!B:C,2,0)
在E2输入公式:=VLOOKUP(B2,对照表!E:F,2,0)
有了辅助列,现在我们就可以在统计表愉快地使用公式了!
在H3输入公式:
=SUMIFS($C:$C,$D:$D,H$2,$E:$E,$G3)
这是一个sumifs多条件求和的公式,需要注意的是相对引用和绝对引用,不然拖拽公式后的结果会不正确。
如下图所示,我们再在合计处,分别输入sum公式,向下向右填充,就可以得到最终的结果。
二、SUMPRODUCT函数一步到位
如果你不想用透视表,也不想用辅助列,可以用这个方法。
在F2输入公式:
=SUMPRODUCT((VLOOKUP(T(IF({1},$A$2:$A$593)),区域对照[#全部],2,0)=F$1)*
(VLOOKUP(T(IF({1},$B$2:$B$593)),物料对照[#全部],2,0)=$E2)*$C$2:$C$593)
数组公式,输完后记得Shift+Ctrl+Enter三键结束。
这个公式有点长,VLOOKUP的第一参数是数组的时候,需要用T函数来降维(T(IF({1},$A$2:$A$593))
用VLOOKUP查找的结果分别和品类,和物料名称进行比对形成两列数组,进行相乘后,再乘发货数量,最后用sumproduct求和,得到多条件求和的结果。
三、没有什么是VBA解决不了的
如果你喜欢用VBA,也可以参考一下下面的VBA代码。当然,如果你有更好的思路也欢迎和我们交流分享。
Sub test2()
t = Timer '计时开始
Dim d As Object, dic As Object, rarr()
Dim cr, i, j, k, dr, er, fr, prngs, qrngs As Range
Set qrngs = Range("H2:L2") '标准区域名称
Set prngs = Range("G3:G14") '标准物料名称
cr = Range("a2", Cells(Rows.Count, "c").End(xlUp)) '把数据源写入数组
Set d = CreateObject("scripting.dictionary")
Set dic = CreateObject("scripting.dictionary")
With Sheets("对照表")
dr = .Range("b2", .Cells(Rows.Count, "c").End(xlUp))
er = .Range("e2", .Cells(Rows.Count, "f").End(xlUp))
End With
For i = 1 To UBound(dr)
d(dr(i, 1)) = dr(i, 2) '把标准的区域对照表写入字典,方便取值
Next i
For j = 1 To UBound(er)
dic(er(j, 1)) = er(j, 2) '把标准的物料名称对照表写入字典,方便取值
m = prngs.Count: n = qrngs.Count
Range("h3").Resize(m, n).ClearContents
ReDim rarr(1 To m, 1 To n) '重新定义字典的大大小,使起刚好可以容纳统计值
For k = 1 To UBound(cr)
coln = WorksheetFunction.Match(d(cr(k, 1)), qrngs, 0) '获取需要累加的值,在数组的行的位置
rown = WorksheetFunction.Match(dic(cr(k, 2)), prngs, 0) '获取需要累加的值,在数组的列的位置
If rarr(rown, coln) = "" Then
rarr(rown, coln) = cr(k, 3)
Else
rarr(rown, coln) = rarr(rown, coln) + cr(k, 3)
End If
Next k
Range("h3").Resize(m, n) = rarr '把计算完毕的数组写入单元格中
MsgBox Timer - t '计时结束
End Sub
好的,以上就是今天的分享,3种方法。
不知道在这次Excel大考中,你能读个什么大学呢?
有什么问题,欢迎给我们留言,说说你的想法。
本文配套的练习课件请加入QQ群:902294808下载。
做Excel高手,快速提升工作效率,部落窝教育《一周Excel直通车》视频和《Excel极速贯通班》直播课全心为你!
扫下方二维码关注公众号,可随时随地学习Excel:
相关推荐:
版权申明:
本文作者柳之;同时部落窝教育享有专有使用权。若需转载请联系部落窝教育。