Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
123
返回列表 发新帖
楼主: lidayu

[已解决]满足多条件汇总

[复制链接]
 楼主| 发表于 2016-1-24 12:26 | 显示全部楼层
grf1973 发表于 2016-1-21 14:02
见15楼附件。

grf1973 您好,再请教您下,就是满足多条件汇总工作簿中的代码如果放在“模块”中要修改? 在其它代码运行时调用(call 小单位数量汇总)“小单位数量汇总的代码”,要怎么才不会提示出错,我用二级有效数据下拉调用时运行到这:arr = Sheets("数据源").[a1].CurrentRegion 错误。
请您赐教,谢谢!
回复

使用道具 举报

发表于 2016-1-25 11:24 | 显示全部楼层
代码已放入模块中。
回答你那个问题:
看看工作表“数据源”是否存在?或者把arr = Sheets("数据源").[a1].CurrentRegion  改为 arr = Sheets(1).[a1].CurrentRegion ,需要把数据源表放到第一张工作表位置。

满足多条件汇总0120.rar

70.34 KB, 下载次数: 11

评分

参与人数 1 +1 收起 理由
lidayu + 1 很给力

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-1-25 15:33 | 显示全部楼层
grf1973 发表于 2016-1-25 11:24
代码已放入模块中。
回答你那个问题:
看看工作表“数据源”是否存在?或者把arr = Sheets("数据源").[a1 ...

grf1973 您好,我的意思是直接用二级下拉调用“Call 小单位数量汇总”要怎么修改。
工作表代码:
'Private Sub Worksheet_Change(ByVal Target As Range)
'    If Intersect(Target, [a2:a3]) Is Nothing Then Exit Sub
'    Application.EnableEvents = False
'    If Target.Address = "$A$2" Then 'Exit Sub
'        [a3] = ""
'        [c4:J13] = ""
'    ElseIf Target.Address = "$A$3" Then 'Exit Sub
'
'        Call 小单位数量汇总
'    End If
'    Application.EnableEvents = True
'End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Target, [a2:a3]) Is Nothing Then Exit Sub
    Set d = CreateObject("scripting.dictionary")
    arr = Sheets("数据源").[a1].CurrentRegion
    For i = 2 To UBound(arr)
        x = arr(i, 3)
        If InStr(d(x), arr(i, 4)) = 0 Then d(x) = d(x) & "," & arr(i, 4)
    Next
    If Target.Address = "$A$2" Then k = Join(d.keys, ",") Else k = Mid(d(Range("a2").Value), 2)
    With Target.Validation
        .Delete
        .Add xlValidateList, , , k
    End With
   Call 小单位数量汇总
End Sub
上面红色代码不用的话能实现吗?

模块代码:
Sub 小单位数量汇总()
    Set d = CreateObject("scripting.dictionary")
    arr = Sheets("数据源").[a1].CurrentRegion
    For i = 2 To UBound(arr)
        x = arr(i, 3) & arr(i, 4) & arr(i, 5) & arr(i, 2) & "软肩章" & arr(i, 6)     '大单位+小单位+级别+性别+软肩章号
        y = arr(i, 3) & arr(i, 4) & arr(i, 5) & arr(i, 2) & "套肩章" & arr(i, 7)     '大单位+小单位+级别+性别+套肩章号
        d(x) = d(x) + arr(i, 1)
        d(y) = d(y) + arr(i, 1)
    Next
    [c4:J13] = ""
    arr = [a2:J13]
    For i = 3 To UBound(arr) - 2
        If arr(i, 1) = "" Then arr(i, 1) = arr(i - 1, 1)
        For j = 3 To 7
            If arr(1, j) = "" Then arr(1, j) = arr(1, j - 1)
            x = [a2] & [a3] & arr(i, 1) & arr(i, 2) & arr(1, j) & arr(2, j)   '大单位+小单位+级别+性别+软(套)肩章号
            arr(i, j) = d(x)
            arr(11, j) = arr(11, j) + arr(i, j)   '第12行汇总
            arr(12, 3) = arr(12, 3) + arr(i, j)        '第13行总计
        Next
        arr(i, 8) = arr(i, 3) + arr(i, 4) + arr(i, 5)
        arr(i, 9) = arr(i, 6) + arr(i, 7)
        arr(i, 10) = arr(i, 8) + arr(i, 9)
        arr(11, 8) = arr(11, 8) + arr(i, 8)
        arr(11, 9) = arr(11, 9) + arr(i, 9)
    Next
    [a2:J13] = arr
End Sub


回复

使用道具 举报

发表于 2016-1-25 16:13 | 显示全部楼层
不能,应该是单元格改变后调用sub(Worksheet_Change事件调用)。
下面黑色的Worksheet_SelectionChange事件是鼠标选中单元格触发的事件。本例中仅对A2:A3生成有效性。

评分

参与人数 1 +1 收起 理由
lidayu + 1 感谢您一直的帮助

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-3-29 23:05 | 显示全部楼层
grf1973 发表于 2016-1-20 16:28
灰色区域VBA实现已完成。
另外:“数据源A列的姓名(是计数)如果改为数量(2、8、求和)代码要怎么修改? ...

grf1973您好,碰到一个新问题请您赐教,下面代码要怎么改为三级下拉(A2一级,A3二级,A4三级)数据来源“sheet1”A列一级,B列二级,C列三级,附图片如下:
QQ截图20160329224937.jpg
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.     If Intersect(Target, [a2:a3]) Is Nothing Then Exit Sub
  3.     Set d = CreateObject("scripting.dictionary")
  4.     Arr = Sheets("sheet1").[a1].CurrentRegion
  5.     For i = 2 To UBound(Arr)
  6.         x = Arr(i, 1)
  7.         If InStr(d(x), Arr(i, 2)) = 0 Then d(x) = d(x) & "," & Arr(i, 2)
  8.     Next
  9.     If Target.Address = "$A$2" Then k = Join(d.keys, ",") Else k = Mid(d(Range("a2").Value), 2)
  10.     With Target.Validation
  11.         .Delete
  12.         .Add xlValidateList, , , k
  13.     End With
  14. End Sub
复制代码
谢谢您多次帮助。


回复

使用道具 举报

发表于 2016-3-30 09:22 | 显示全部楼层
以前做过的一个例子,自己改改就行了。

多级菜单.rar

28.97 KB, 下载次数: 9

评分

参与人数 1 +3 收起 理由
lidayu + 3 赞一个

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-3-30 10:00 | 显示全部楼层
grf1973 发表于 2016-3-30 09:22
以前做过的一个例子,自己改改就行了。

grf1973 您好,您这工作簿是列形式的我想要的单元格,所以我不懂怎么改,请您帮忙改下好吗谢谢!
呈上附件: 二级改为三级.rar (516.61 KB, 下载次数: 4)
回复

使用道具 举报

发表于 2016-3-30 10:46 | 显示全部楼层
在原帖也回了。

二级改为三级.rar

543.29 KB, 下载次数: 11

评分

参与人数 1 +3 收起 理由
lidayu + 3 感谢您的帮助!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-3-31 11:46 | 显示全部楼层
grf1973 发表于 2016-1-20 14:28

grf1973 您好,上次您帮我计数汇总现在改为“√”要怎么修改才能实现,附件中有您之前的代码,希望能再一次得到您的帮助,谢谢!
VBA满足多条件汇总√.rar (93.87 KB, 下载次数: 3)
回复

使用道具 举报

发表于 2016-3-31 14:09 | 显示全部楼层
请看附件。

VBA满足多条件汇总√.rar

75.91 KB, 下载次数: 4

评分

参与人数 1 +3 收起 理由
lidayu + 3 大师风范热心助人,完美解决了问题,谢谢您.

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 09:43 , Processed in 0.506491 second(s), 18 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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