美文网首页
vba巧用工作表函数

vba巧用工作表函数

作者: 猛犸象和剑齿虎 | 来源:发表于2024-01-22 17:26 被阅读0次

    日常工作中经常涉及到将纵向数据进行横向填写,方便月度数据汇总,那么将工作表函数运用到vba中十分有效。


    image.png

    ' 出入库数据填写
    For n = 4 To [a63356].End(xlUp).Row
    For dt = 1 To [d1] - [b1] + 1
    '入库填写
    Cells(n, 2 * dt + 14) = WorksheetFunction.SumIfs(Worksheets("年成品日出入明细表").Range("l2:l" & icount), _
    Worksheets("年成品日出入明细表").Range("a2:a" & icount), Cells(3, 2 * dt + 14), _
    Worksheets("年成品日出入明细表").Range("b2:b" & icount), Cells(n, 2), _
    Worksheets("年成品日出入明细表").Range("c2:c" & icount), Cells(n, 3), _
    Worksheets("年成品日出入明细表").Range("d2:d" & icount), Cells(n, 4), _
    Worksheets("年成品日出入明细表").Range("e2:e" & icount), Cells(n, 5) _
    )
    '出库填写
    Cells(n, 2 * dt + 15) = WorksheetFunction.SumIfs(Worksheets("年成品日出入明细表").Range("n2:n" & icount), _
    Worksheets("年成品日出入明细表").Range("a2:a" & icount), Cells(3, 2 * dt + 15), _
    Worksheets("年成品日出入明细表").Range("b2:b" & icount), Cells(n, 2), _
    Worksheets("年成品日出入明细表").Range("c2:c" & icount), Cells(n, 3), _
    Worksheets("年成品日出入明细表").Range("d2:d" & icount), Cells(n, 4), _
    Worksheets("年成品日出入明细表").Range("e2:e" & icount), Cells(n, 5) _
    )
    Next dt
    Cells(n, "n") = WorksheetFunction.SumIf(Range(Cells(2, "p"), Cells(2, "p").End(xlToRight)), "入", Range(Cells(n, "p"), Cells(n, "p").End(xlToRight)))
    Cells(n, "o") = WorksheetFunction.SumIf(Range(Cells(2, "p"), Cells(2, "p").End(xlToRight)), "出", Range(Cells(n, "p"), Cells(n, "p").End(xlToRight)))
    Cells(n, "l") = Cells(n, "h") - Cells(n, "n")
    Cells(n, "m") = Cells(n, "i") - Cells(n, "o")
    Next n

    
    Sub usual()
      
        Dim arr
        Dim uniqueArr() As Variant
        Dim i As Long, j As Long, n As Long
        Dim d As Object
    
        Worksheets("日出入库").Range("a3:cc63356").Clear
       
    icount = Worksheets("年成品日出入明细表").[a63356].End(xlUp).Row
    arr = Worksheets("年成品日出入明细表").Range("a2:Q" & icount)
        ' 初始化数组和字典
        Set d = CreateObject("Scripting.Dictionary")
        ' 使用字典找出不重复的订单号、产品和日期
        For i = 1 To UBound(arr)
            If arr(i, 2) <> "合计:" And arr(i, 2) <> "总计:" _
            And arr(i, 1) >= Worksheets("日出入库").[b1] _
            And arr(i, 1) <= Worksheets("日出入库").[d1] _
            Then
            '将累加相关的值写到item里面
            iarr = Array(arr(i, 13), arr(i, 15), arr(i, 16), arr(i, 17))
                d(arr(i, 2) & "|" & arr(i, 3) & "|" & arr(i, 4) & "|" & arr(i, 5) & "|" & arr(i, 6) & "|" & arr(i, 7)) = iarr '组合成键值
            End If
        Next i
        
      ReDim uniqueArr(1 To d.Count, 1 To 10)
        j = 1 '新数组的索引
        For Each Key In d.keys
            arrkey = Split(Key, "|") '分割键值得到订单号、产品和日期
            uniqueArr(j, 1) = arrkey(0) '客户经理
            uniqueArr(j, 2) = arrkey(1) '客户名称
            uniqueArr(j, 3) = arrkey(2) '订单号
            uniqueArr(j, 4) = arrkey(3) '产品型号
            uniqueArr(j, 5) = arrkey(4) '加工类型
            uniqueArr(j, 6) = arrkey(5) '计划量
            uniqueArr(j, 7) = d(Key)(0) '入库累计
            uniqueArr(j, 8) = d(Key)(1) '出库累计
            uniqueArr(j, 9) = d(Key)(2) '库存
            uniqueArr(j, 10) = d(Key)(3) '批次欠产数量
            j = j + 1
        Next Key
        
        For n = 1 To UBound(uniqueArr)
            Worksheets("日出入库").Cells(n + 3, "a") = n
            Worksheets("日出入库").Cells(n + 3, "b") = uniqueArr(n, 1)
            Worksheets("日出入库").Cells(n + 3, "c") = uniqueArr(n, 2)
            Worksheets("日出入库").Cells(n + 3, "D") = uniqueArr(n, 3)
            Worksheets("日出入库").Cells(n + 3, "E") = uniqueArr(n, 4)
            Worksheets("日出入库").Cells(n + 3, "F") = uniqueArr(n, 5)
            Worksheets("日出入库").Cells(n + 3, "G") = uniqueArr(n, 6)
            Worksheets("日出入库").Cells(n + 3, "H") = uniqueArr(n, 7)
            Worksheets("日出入库").Cells(n + 3, "I") = uniqueArr(n, 8)
            Worksheets("日出入库").Cells(n + 3, "J") = uniqueArr(n, 9)
            Worksheets("日出入库").Cells(n + 3, "K") = uniqueArr(n, 10)
            
        Next
        '将筛选后的日期写到对应单元格
        [a3:o3] = Array("序号", "客户经理", "客户名称", "订单号", "产品型号", "加工类型", "计划量", "入库累计", "出库累计", "库存", "批次欠产数量", "结转上月入库", "结转上月出库", "本月入库", "本月出库")
        For fday = 1 To [d1] - [b1] + 1
            Cells(3, 2 * fday + 14) = [b1] + fday - 1
            Cells(3, 2 * fday + 15) = [b1] + fday - 1
            Cells(2, 2 * fday + 14) = "入"
            Cells(2, 2 * fday + 15) = "出"
        Next
        
        ' 出入库数据填写
        For n = 4 To [a63356].End(xlUp).Row
            For dt = 1 To [d1] - [b1] + 1
                '入库填写
                Cells(n, 2 * dt + 14) = WorksheetFunction.SumIfs(Worksheets("年成品日出入明细表").Range("l2:l" & icount), _
                Worksheets("年成品日出入明细表").Range("a2:a" & icount), Cells(3, 2 * dt + 14), _
                Worksheets("年成品日出入明细表").Range("b2:b" & icount), Cells(n, 2), _
                Worksheets("年成品日出入明细表").Range("c2:c" & icount), Cells(n, 3), _
                Worksheets("年成品日出入明细表").Range("d2:d" & icount), Cells(n, 4), _
                Worksheets("年成品日出入明细表").Range("e2:e" & icount), Cells(n, 5) _
                )
                '出库填写
                Cells(n, 2 * dt + 15) = WorksheetFunction.SumIfs(Worksheets("年成品日出入明细表").Range("n2:n" & icount), _
                Worksheets("年成品日出入明细表").Range("a2:a" & icount), Cells(3, 2 * dt + 15), _
                Worksheets("年成品日出入明细表").Range("b2:b" & icount), Cells(n, 2), _
                Worksheets("年成品日出入明细表").Range("c2:c" & icount), Cells(n, 3), _
                Worksheets("年成品日出入明细表").Range("d2:d" & icount), Cells(n, 4), _
                Worksheets("年成品日出入明细表").Range("e2:e" & icount), Cells(n, 5) _
                )
            Next dt
            Cells(n, "n") = WorksheetFunction.SumIf(Range(Cells(2, "p"), Cells(2, "p").End(xlToRight)), "入", Range(Cells(n, "p"), Cells(n, "p").End(xlToRight)))
            Cells(n, "o") = WorksheetFunction.SumIf(Range(Cells(2, "p"), Cells(2, "p").End(xlToRight)), "出", Range(Cells(n, "p"), Cells(n, "p").End(xlToRight)))
            Cells(n, "l") = Cells(n, "h") - Cells(n, "n")
            Cells(n, "m") = Cells(n, "i") - Cells(n, "o")
        Next n
        
        
        Set d = Nothing
    End Sub
    

    相关文章

      网友评论

          本文标题:vba巧用工作表函数

          本文链接:https://www.haomeiwen.com/subject/wnnyodtx.html