分享

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

 龙门过客栈 2017-04-05

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

'1231228.xls

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

模块1:

Public m%, k1

    Private Sub Workbook_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 Sub Worksheet_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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多