打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
12,多工作表汇总(字典)

'12,多工作表汇总(字典)

'1231228.xls

'http://club.excelhome.net/thread-518738-1-1.html

模块1:

Public m%, k1

    Private SubWorkbook_Open()

       Dim d, k, t, Myr&, Arr, i&

       Set d = CreateObject("Scripting.Dictionary")

       With Sheet3

           Myr = .[a65536].End(xlUp).Row

           Arr = .Range("a2:e" & Myr)

           For i = 1 To UBound(Arr)

               d(Arr(i, 1)) = ""

           Next

           k = d.keys

           With Sheet1.[b1].Validation

               .Delete

               .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _

               Operator:=xlBetween, Formula1:=Join(d.keys, ",")

           End With

           d.RemoveAll

           Set d = CreateObject("Scripting.Dictionary")

           For i = 1 To UBound(Arr)

               d(Arr(i, 4)) = ""

           Next

           m = d.Count

           k1 = d.keys

       End With

    End Sub

    Private SubWorksheet_Change(ByVal Target As Range)

       If Target.Count > 1 Then Exit Sub

       If Target.Address <> "$B$1" Then Exit Sub

       Dim d, k, t, Arr, i&, Myr&, x, yf, j&, Arr1

       Dim ii&, lj, zb, ljs, cp, j1%, y, jj%

       Set d = CreateObject("Scripting.Dictionary")

       yf = Target.Value

       With Sheet2

           Myr = .[a65536].End(xlUp).Row

           Arr = .Range("a2:e" & Myr)

           For i = 1 To UBound(Arr)

               x = Arr(i, 1) & "|" & Arr(i, 4)

               d(x) = d(x) + Arr(i, 5)

           Next

           k = d.keys

           t = d.items

           ReDim Arr1(1 To m, 1 To 7)

           For j = 0 To UBound(k1)

               For j1 = 0 To UBound(k)

                   y = Val(Split(k(j1), "|")(0))

                   cp = Split(k(j1), "|")(1)

                   If cp = k1(j) And y = yf Then Arr1(j + 1, 1) = k1(j)

                       Arr1(j + 1, 3) = t(j1) '本月发货

                   End If

                   If cp = k1(j) And y < yf + 1 Then

                       lj = lj + t(j1)  '累计发货

                   End If

               Next

               Arr1(j + 1, 6) = lj '累计发货

               lj = 0

           Next

       End With

       d.RemoveAll

       Set d = CreateObject("Scripting.Dictionary")

       With Sheet3

           Myr = .[a65536].End(xlUp).Row

           Arr = .Range("a2:e" & Myr)

           For i = 1 To UBound(Arr)

               x = Arr(i, 1) & "|" & Arr(i, 4)

               d(x) = d(x) + Arr(i, 5)

           Next

            k= d.keys

           t = d.items

           For j = 0 To UBound(k1)

               For j1 = 0 To UBound(k)

               y = Val(Split(k(j1), "|")(0))

               cp = Split(k(j1), "|")(1)

               If cp = k1(j) And y = yf Then

                   Arr1(j + 1, 2) = t(j1) '本月指标

                       For ii = 1 To UBound(k) + 1

                           zb = zb + t(ii - 1) '本年指标

                       Next

                   Arr1(j + 1, 5) = zb '本年指标

                   zb = 0

                   Exit For

               End If

               Next

           Next

       End With

       d.RemoveAll

       Set d = CreateObject("Scripting.Dictionary")

       With Sheet4

           Myr = .[a65536].End(xlUp).Row

           Arr = .Range("a2:e" & Myr)

           For i = 1 To UBound(Arr)

               x = Arr(i, 1) & "|" & Arr(i, 4)

               d(x) = d(x) + Arr(i, 5)

           Next

               k = d.keys

               t = d.items

           For j = 0 To UBound(k1)

               For j1 = 0 To UBound(k)

                   y = Val(Split(k(j1), "|")(0))

                   cp = Split(k(j1), "|")(1)

                   If cp = k1(j) And y = yf Then

                       Arr1(j + 1, 4) = t(j1) '上年发货

                   End If

                   If cp = k1(j) And y < yf + 1 Then

                       ljs = ljs +t(j1)             '累计发货

                   End If

               Next

               Arr1(j + 1, 7) = ljs '累计发货

               ljs = 0

           Next

       End With

       Sheet1.[c4].Resize(UBound(Arr1), 7).ClearContents

       Sheet1.[c4].Resize(UBound(Arr1), 7) = Arr1

    End Sub

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Excel 常见字典用法集锦及代码详解5
东方财富网eastmoney数据下载 | VBA实例教程
利用宏来求出Excel2013中不重复人名
发大招!EXCEL让人崩溃的超难排名问题!VBA轻松搞定!
高手们,请给代码添加”注释“!谢谢
【习题】一维表转二维表
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服