Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: icenotcool

[已解决]多表汇总求和公式求修正

[复制链接]
 楼主| 发表于 2015-12-23 15:42 | 显示全部楼层
爱疯 发表于 2015-12-23 15:34
建议一个帖子里,只有一个主要问题,以便看帖。

爱疯老师,就是按19楼来回复
回复

使用道具 举报

发表于 2015-12-23 15:49 | 显示全部楼层
QQ截图20151223153820.jpg

在对于第1个表(汇总)里

1)在A1:O22里,你把
已提供数据,填充为绿色
需统计区域,填充为黄色

2)D1:O1的内容,能改动吗?

3)已提供数据,是你手动给出的,还是根据什么得到的?






回复

使用道具 举报

 楼主| 发表于 2015-12-23 16:00 | 显示全部楼层
爱疯 发表于 2015-12-23 15:49
在对于第1个表(汇总)里

1)在A1:O22里,你把

解释:A1:B22是已经提供的,D2:O22是自动从每个表的R列对应复制过来的,然后C列是根据D2:O22相加得出来的
2D1:O1的内容,能改动吗?

回复

使用道具 举报

发表于 2015-12-23 17:17 | 显示全部楼层
icenotcool 发表于 2015-12-23 16:00
解释:A1:B22是已经提供的,D2:O22是自动从每个表的R列对应复制过来的,然后C列是根据D2:O22相加得出来的 ...

Sub test()
    Dim d, A, k, i, j, m
    Set d = CreateObject("scripting.dictionary")
    Call test2

    '1)统计
    For k = 2 To Sheets.Count
        With Sheets(k)
            m = "|" & .Name & "|"
            A = .Range("a1:r" & .Range("a65536").End(3).Row)
        End With

        For i = 2 To UBound(A)
            If Not d.exists(A(i, 1)) Then Set d(A(i, 1)) = CreateObject("scripting.dictionary")
            For j = 3 To UBound(A, 2) - 1
                d(A(i, 1))(A(i, 1)) = A(i, 2)    '姓名
                If VBA.IsNumeric(A(i, j)) Then d(A(i, 1))(m) = d(A(i, 1))(m) + A(i, j)   '合计
            Next j
        Next i
    Next k

    '2)查询
    A = Sheets(1).Range("a1").CurrentRegion
    For i = 2 To UBound(A)
        A(i, 2) = d(A(i, 1))(A(i, 1))
        k = 0
        For j = 4 To UBound(A, 2)
            A(i, j) = d(A(i, 1))(A(1, j))
            k = k + A(i, j)
        Next j
        A(i, 3) = k
    Next i

    '3)输出
    Sheets(1).Range("a1").Resize(i - 1, UBound(A, 2)) = A

End Sub

Sub test2()
    Dim n, A, i
    n = Sheets.Count
    ReDim A(1 To 1, 1 To n - 1)
    For i = 2 To n
        A(1, i - 1) = "|" & Sheets(i).Name & "|"
    Next i
    Sheets(1).Range("d1").Resize(1, UBound(A, 2)) = A
End Sub

例子修改2.rar (116.96 KB, 下载次数: 10)
回复

使用道具 举报

发表于 2015-12-23 18:28 | 显示全部楼层
本帖最后由 tgydslr 于 2015-12-23 18:32 编辑

C2=SUM(SUMIF(INDIRECT(INDEX(MZ,N(IF(1,ROW($2:$8))))&"!B:B"),B2,INDIRECT(INDEX(MZ,N(IF(1,ROW($2:$8))))&"!R:R")))三键下拉
其中MZ=RIGHT(GET.WORKBOOK(1),LEN(GET.WORKBOOK(1))-FIND("]",GET.WORKBOOK(1)))
回复

使用道具 举报

发表于 2015-12-23 18:33 | 显示全部楼层
例子更新.rar (115.49 KB, 下载次数: 5)
回复

使用道具 举报

 楼主| 发表于 2015-12-24 09:13 | 显示全部楼层
爱疯 发表于 2015-12-23 17:17
Sub test()
    Dim d, A, k, i, j, m
    Set d = CreateObject("scripting.dictionary")

老师,你理解错我的意思了,我现在重新用函数公式把效果图上传,麻烦老师再帮我修改一下好吗?详情看附件内说明 例子公式效果.rar (119.85 KB, 下载次数: 4)
回复

使用道具 举报

发表于 2015-12-24 09:22 | 显示全部楼层
例子修改2.rar (116.96 KB, 下载次数: 9)
回复

使用道具 举报

 楼主| 发表于 2015-12-24 09:42 | 显示全部楼层
爱疯 发表于 2015-12-24 09:22
For j = 3 To UBound(A, 2) - 1
                d(A(i, 1))(A(i, 1)) = A(i, 2)    '姓 ...

老师,你的修改的不行,可以就着我27楼的附件公式效果修改,好吗?麻烦老师了
回复

使用道具 举报

发表于 2015-12-24 09:56 | 显示全部楼层
icenotcool 发表于 2015-12-24 09:42
老师,你的修改的不行,可以就着我27楼的附件公式效果修改,好吗?麻烦老师了

28楼具体是哪儿不行?
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-3 19:59 , Processed in 0.236532 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表