Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2199|回复: 2

[已解决]dsmch老师,还有疑问???

[复制链接]
发表于 2014-5-8 18:47 | 显示全部楼层 |阅读模式
[已解决]dsmch老师,有空帮我看看,谢谢。
http://www.excelpx.com/thread-323493-1-1.html
当表三为空白时,明细表E列不能求和??
最佳答案
2014-5-8 20:47
Sub Macro1()
On Error Resume Next
Dim arr, brr, crr(1 To 16, 1 To 8), d
Dim n&, k%, j&, i&, s&, ar, br, cr
Set d = CreateObject("scripting.dictionary")
br = Sheets("装模").Range("a1").CurrentRegion
cr = Sheets("明细表").Range("b5:b" & Sheets("明细表").Range("b65536").End(xlUp).Row)
Range("a3:h65536").ClearContents
n = 3
For k = 1 To 2
    arr = Sheets(k).UsedRange
    For i = 2 To UBound(arr)
        If InStr(arr(i, 1), "对应单号") And Len(arr(i, 1)) > 5 Then
            brr = Sheets(k).Cells(i, 1).Resize(16, 8)
            y = Val(brr(1, 6)): m = Val(brr(1, 7)): r = Val(brr(1, 8))
            rq = DateSerial(y, m, r)
            dh = Mid(brr(1, 1), 6)
            mc = Mid(brr(2, 1), 4)
            s = 0
            For j = 4 To UBound(brr)
                If brr(j, 2) <> "" Then
                    s = s + 1
                    crr(s, 1) = rq
                    crr(s, 2) = dh
                    crr(s, 3) = mc
                    crr(s, 4) = brr(j, 2)
                    crr(s, 5) = brr(j, 5)
                    crr(s, 6) = brr(j, 6)
                    crr(s, 7) = brr(j, 7)
                    crr(s, 8) = brr(j, 3)
                End If
            Next
            Cells(n, 1).Resize(s, UBound(crr, 2)) = crr
            n = n + s
        End If
    Next
Next
x = Sheet3.Range("a65536").End(xlUp).Row + 1
'If x < 3 Then Exit Sub删除该行
Sheet3.Range("a3:h" & x).Copy Cells(n, 1)
ar = Range("a1").CurrentRegion
For i = 3 To UBound(ar)
    d(ar(i, 8)) = d(ar(i, 8)) + ar(i, 7)
Next
For i = 2 To UBound(br)
    d(br(i, 8)) = d(br(i, 8)) + br(i, 7)
Next
For i = 1 To UBound(cr)
    cr(i, 1) = d(cr(i, 1))
Next
Sheets("明细表").Range("e5").Resize(UBound(cr)) = cr
End Sub

试改(1).zip

322.9 KB, 下载次数: 10

发表于 2014-5-8 20:47 | 显示全部楼层    本楼为最佳答案   
Sub Macro1()
On Error Resume Next
Dim arr, brr, crr(1 To 16, 1 To 8), d
Dim n&, k%, j&, i&, s&, ar, br, cr
Set d = CreateObject("scripting.dictionary")
br = Sheets("装模").Range("a1").CurrentRegion
cr = Sheets("明细表").Range("b5:b" & Sheets("明细表").Range("b65536").End(xlUp).Row)
Range("a3:h65536").ClearContents
n = 3
For k = 1 To 2
    arr = Sheets(k).UsedRange
    For i = 2 To UBound(arr)
        If InStr(arr(i, 1), "对应单号") And Len(arr(i, 1)) > 5 Then
            brr = Sheets(k).Cells(i, 1).Resize(16, 8)
            y = Val(brr(1, 6)): m = Val(brr(1, 7)): r = Val(brr(1, 8))
            rq = DateSerial(y, m, r)
            dh = Mid(brr(1, 1), 6)
            mc = Mid(brr(2, 1), 4)
            s = 0
            For j = 4 To UBound(brr)
                If brr(j, 2) <> "" Then
                    s = s + 1
                    crr(s, 1) = rq
                    crr(s, 2) = dh
                    crr(s, 3) = mc
                    crr(s, 4) = brr(j, 2)
                    crr(s, 5) = brr(j, 5)
                    crr(s, 6) = brr(j, 6)
                    crr(s, 7) = brr(j, 7)
                    crr(s, 8) = brr(j, 3)
                End If
            Next
            Cells(n, 1).Resize(s, UBound(crr, 2)) = crr
            n = n + s
        End If
    Next
Next
x = Sheet3.Range("a65536").End(xlUp).Row + 1
'If x < 3 Then Exit Sub删除该行
Sheet3.Range("a3:h" & x).Copy Cells(n, 1)
ar = Range("a1").CurrentRegion
For i = 3 To UBound(ar)
    d(ar(i, 8)) = d(ar(i, 8)) + ar(i, 7)
Next
For i = 2 To UBound(br)
    d(br(i, 8)) = d(br(i, 8)) + br(i, 7)
Next
For i = 1 To UBound(cr)
    cr(i, 1) = d(cr(i, 1))
Next
Sheets("明细表").Range("e5").Resize(UBound(cr)) = cr
End Sub
回复

使用道具 举报

 楼主| 发表于 2014-5-8 20:50 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 10:50 , Processed in 0.341481 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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