- Sub 进出库汇总最新()
- Dim ARR, Ar, Br, i&, j&, mStr$, m&, Sum1#, Sum2#, T1 As Date: T1 = Timer
- Ar = Sheet1.Range("b4").CurrentRegion.Value '入库明细
- Br = Sheet2.Range("b4").CurrentRegion.Value '出库明细
- Application.ScreenUpdating = False
-
- With Sheet6 '进出库汇总
- .Activate
- Dim s1 As Date: s1 = .Range("o1").Value '月初日期上月,
- Dim e1 As Date: e1 = .Range("Q1").Value '上月,月末日期
- Dim s2 As Date: s2 = .Range("P4").Value '本月,月初日期
- Dim e2 As Date: e2 = .Range("Q4").Value '本月,月末日期
- End With
- ReDim ARR(1 To UBound(Ar) + UBound(Br), 1 To 12)
- Dim d As Object: Set d = CreateObject("scripting.Dictionary")
- For i = 2 To UBound(Ar)
- If Len(Ar(i, 1)) > 0 And Len(Ar(i, 4)) > 0 And Len(Ar(i, 6)) > 0 Then
- If Ar(i, 5) = 0 Then Ar(i, 5) = Empty
- mStr = Ar(i, 1) & "," & Ar(i, 4) & "," & Ar(i, 5) & "," & Ar(i, 6)
- If Not d.Exists(mStr) Then
- m = m + 1
- d(mStr) = m
- ARR(m, 1) = Ar(i, 1)
- ARR(m, 2) = m
- ARR(m, 3) = Empty
- ARR(m, 4) = Ar(i, 4)
- ARR(m, 5) = Ar(i, 5)
- ARR(m, 6) = Ar(i, 6)
- End If
- End If
- Next
- For i = 1 To UBound(ARR)
- Sum1 = 0: Sum2 = 0
- For j = 2 To UBound(Ar)
- If Len(Ar(j, 3)) > 0 And IsDate(Ar(j, 3)) Then
- If ARR(i, 1) = Ar(j, 1) And ARR(i, 4) = Ar(j, 4) Then
- If Ar(j, 3) >= s1 And Ar(j, 3) <= e1 Then Sum1 = Sum1 + Val(Ar(j, 7))
- If Ar(j, 3) >= s2 And Ar(j, 3) <= e2 Then ARR(i, 8) = ARR(i, 8) + Val(Ar(j, 7))
- ARR(i, 11) = ARR(i, 11) + Val(Ar(j, 7))
- End If
- End If
- Next
- For j = 2 To UBound(Br)
- If Len(Br(j, 3)) > 0 And IsDate(Br(j, 3)) Then
- If ARR(i, 1) = Br(j, 1) And ARR(i, 4) = Br(j, 4) Then
- If Br(j, 3) >= s1 And Br(j, 3) <= e1 Then Sum2 = Sum2 + Val(Br(j, 7))
- If Br(j, 3) >= s2 And Br(j, 3) <= e2 Then ARR(i, 9) = ARR(i, 9) + Val(Br(j, 7))
- ARR(i, 12) = ARR(i, 12) + Val(Br(j, 7))
- End If
- End If
- Next
- ARR(i, 7) = Sum1 - Sum2
- ARR(i, 10) = ARR(i, 11) - ARR(i, 12)
- Next
- For i = 1 To UBound(ARR)
- For j = 7 To 12
- If Len(ARR(i, j)) = 0 Then ARR(i, j) = 0
- Next
- Next
- Range("b5:N1048576").ClearContents
- Range("B5").Resize(m, 12).Value = ARR
- Application.ScreenUpdating = True
-
- MsgBox "数据已统计完成,用时约:" & Format(Timer - T1, "0.00") & "秒!"
- End Sub
复制代码 老师,这个你上次帮我写的代码,现在数据多,运行很慢,帮我优化看能不能提升速度,谢谢
|