Mình có 1 file có 2 sheet: DSHS và THONG KE THEO DIA CHI
Mình thống kê trong sheet "THONG KE THEO DIA CHI" bằng công thức.
Và mình muốn chuyển công thức này sang Code để dùng trong trường hợp tổng quát hơn ( Mảng không xác định)
Mong các bạn trong GPE giúp đỡ !
Chân thành cảm ơn !
Thử "cố tỏ ra lợi hại" xem sao nào:
[GPECODE=vb]Sub TongHop()
Dim i As Long, j As Long, k As Long, l As Long, Arr(), Tmp, DicT, DicA
Tmp = Sheets("DSHS").[G5:H10000]
ReDim Arr(1 To 100, 1 To 100)
Set DicT = CreateObject("Scripting.Dictionary")
Set DicA = CreateObject("Scripting.Dictionary")
k = 1: l = 1: Arr(1, 1) = "T" & ChrW(7893)
'Thong ke chi tiet
For i = 1 To UBound(Tmp)
If IsEmpty(Tmp(i, 1)) Then Exit For
If Not DicT.Exists(Tmp(i, 1)) Then 'Them To neu chua co
k = k + 1: DicT.Add Tmp(i, 1), k: Arr(k, 1) = Tmp(i, 1)
End If
If Not DicA.Exists(Tmp(i, 2)) Then 'Them Ap neu chua co
l = l + 1: DicA.Add Tmp(i, 2), l: Arr(1, l) = Tmp(i, 2)
End If
Arr(DicT.Item(Tmp(i, 1)), DicA.Item(Tmp(i, 2))) = Arr(DicT.Item(Tmp(i, 1)), DicA.Item(Tmp(i, 2))) + 1
Next
'Tao hang tong cong
k = k + 1: Arr(k, 1) = "T" & ChrW(7893) & "ng"
For i = 2 To k - 1
For j = 2 To l
Arr(k, j) = Arr(k, j) + Arr(i, j)
Next
Next
'Gan gia tri len sheet, sort theo cot To va ke khung
With Sheets("THONG KE THEO DIA CHI")
.[A3].CurrentRegion.Clear
.[A1].Resize(, l).HorizontalAlignment = xlCenterAcrossSelection
With .[A3].Resize(k, l)
.Value = Arr
.Resize(k - 1).Sort .Cells(1, 1), 1, Header:=xlYes
.Borders.LineStyle = 1
End With
End With
End Sub[/GPECODE]
Trong file đính kèm, bạn nhấn tổ hợp phím
Ctrl+Shift+C để chạy code.
Thực ra với bài này, tôi nghĩ là PivotTable với source là name động có thể xử lý êm đẹp, nhẹ nhàng, nhưng mà tôi lại rất dở về món này nên không dám múa rìu qua mắt thợ, đành nhờ các thành viên khác ra tay vậy.