hoangtrong_vbnd
Thành viên hoạt động



- Tham gia
- 14/1/11
- Bài viết
- 156
- Được thích
- 7
- Giới tính
- Nam
E có file excel nhật ký chung, tổng hợp phát sinh đối ứng mà dùng công thức chạy thì hơi chậm. Nhờ các bác chuyển giúp e sang vba chạy cho ngon. E cảm ơn !
Vì không phải trong ngành nên chưa hiểu lắm.
Xem tạm file này, chờ người khác viết VBA chạy "ngon" hơn.
Sub GPE()
Dim Dic As Object, Tm, Tk1, Tk2, i
Set Dic = CreateObject("Scripting.Dictionary")
Tm = Sheet03.Range(Sheet03.[H8], Sheet03.[J8].End(xlDown))
Tk1 = Sheet08.[B4].Value
For i = 1 To UBound(Tm, 1)
'PS No
If Left(Tm(i, 1), 3) = Tk1 Then
Tk2 = Left(Tm(i, 2), 3)
If Not Dic.exists(Tk2) Then
Dic.Add Tk2, Array(Tk2, 0, 0)
End If
Dic.Item(Tk2) = Array(Dic.Item(Tk2)(0), Dic.Item(Tk2)(1) + Tm(i, 3), Dic.Item(Tk2)(2))
End If
'PS Co
If Left(Tm(i, 2), 3) = Tk1 Then
Tk2 = Left(Tm(i, 1), 3)
If Not Dic.exists(Tk2) Then
Dic.Add Tk2, Array(Tk2, 0, 0)
End If
Dic.Item(Tk2) = Array(Dic.Item(Tk2)(0), Dic.Item(Tk2)(1), Dic.Item(Tk2)(2) + Tm(i, 3))
End If
Next
'Chep vao sheet
Tm = Dic.Items
Sheet08.[B8].Resize(92, 3).ClearContents
For i = 0 To Dic.Count - 1
Sheet08.Cells(i + 8, "B").Resize(, 3) = Tm(i)
Next
Sheet08.Range("B8").Resize(i, 3).Sort Key1:=Sheet08.Range("B8"), Order1:=xlAscending
Sheet08.Rows("8:" & 8 + i).EntireRow.Hidden = False
Sheet08.Rows(i + 9 & ":100").Hidden = True
End Sub
Sub GPE()
Dim Dic As Object, Tm, Tk1, Tk2, L, i
Set Dic = CreateObject("Scripting.Dictionary")
Tm = Sheet03.Range(Sheet03.[H8], Sheet03.[J8].End(xlDown))
Tk1 = Sheet08.[B4].Value
L = Len(Tk1)
For i = 1 To UBound(Tm, 1)
'PS No
If Left(Tm(i, 1), L) = Tk1 Then
Tk2 = Tm(i, 2)
If Not Dic.exists(Tk2) Then
Dic.Add Tk2, Array(Tk2, 0, 0)
End If
Dic.Item(Tk2) = Array(Dic.Item(Tk2)(0), Dic.Item(Tk2)(1) + Tm(i, 3), Dic.Item(Tk2)(2))
End If
'PS Co
If Left(Tm(i, 2), L) = Tk1 Then
Tk2 = Tm(i, 1)
If Not Dic.exists(Tk2) Then
Dic.Add Tk2, Array(Tk2, 0, 0)
End If
Dic.Item(Tk2) = Array(Dic.Item(Tk2)(0), Dic.Item(Tk2)(1), Dic.Item(Tk2)(2) + Tm(i, 3))
End If
Next
'Chep vao sheet
Tm = Dic.Items
Sheet08.[B8].Resize(92, 3).ClearContents
For i = 0 To Dic.Count - 1
Sheet08.Cells(i + 8, "B").Resize(, 3) = Tm(i)
Next
Sheet08.Range("B8").Resize(i, 3).Sort Key1:=Sheet08.Range("B8"), Order1:=xlAscending
Sheet08.Rows("8:" & 8 + i).EntireRow.Hidden = False
Sheet08.Rows(i + 9 & ":100").Hidden = True
End Sub
Các bác chia sẻ giúp e đối với những trường hợp như thế này thì xử lý làm sao được ko. E cảm ơn !Private Sub WorkSheet_Change(ByVal Target As Range)
If Target.Address = "$B$4" Then THDU_GPE
End Sub