hoaiantrinh
Thành viên mới

- Tham gia
- 20/1/13
- Bài viết
- 31
- Được thích
- 5

Chạy code . . .Nhờ các anh chị hỗ trợ lọc cụm giá trị duy nhất và đếm số lần xuất hiện của cụm đó, em cảm ơn ạ. Có thể viết hàm hoặc code VBA ạ. Em có gửi file đính kèm
Sub xyz()
Dim dic As Object, sh As Worksheet, arr(), res()
Dim sR&, fR&, i&, k&, ik&
Set dic = CreateObject("scripting.dictionary")
Set sh = Sheets("Sheet2")
arr = sh.Range("C3", sh.Range("C" & Rows.Count).End(xlUp)).Value
sR = UBound(arr)
ReDim res(1 To sR, 1 To 2)
For i = 1 To sR
If dic.exists(arr(i, 1)) = False Then
k = k + 1
dic.Add arr(i, 1), k
res(k, 1) = arr(i, 1)
res(k, 2) = 1
Else
ik = dic(arr(i, 1))
res(ik, 2) = res(ik, 2) + 1
End If
Next i
Application.DisplayAlerts = False
Application.ScreenUpdating = False
sR = sh.Range("F" & Rows.Count).End(xlUp).Row
If sR > 2 Then sh.Range("F3:G" & sR).Clear
sh.Range("F3").Resize(k, 2) = res
sh.Range("F3").Resize(k, 2).Sort sh.Range("G3"), 1, sh.Range("F3"), , 1, Header:=xlNo
For i = 3 To sR
If sh.Range("G" & i) <> sh.Range("G" & i - 1) Then fR = i
If sh.Range("G" & i) <> sh.Range("G" & i + 1) Then
sh.Range("G" & fR, sh.Range("G" & i)).MergeCells = True
End If
Next i
sh.Range("F3").Resize(k, 2).Borders.LineStyle = 1
sh.Range("G3").Resize(k).HorizontalAlignment = xlCenter
sh.Range("G3").Resize(k).VerticalAlignment = xlCenter
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub



Chạy code . . .
Mã:Sub xyz() Dim dic As Object, sh As Worksheet, arr(), res() Dim sR&, fR&, i&, k&, ik& Set dic = CreateObject("scripting.dictionary") Set sh = Sheets("Sheet2") arr = sh.Range("C3", sh.Range("C" & Rows.Count).End(xlUp)).Value sR = UBound(arr) ReDim res(1 To sR, 1 To 2) For i = 1 To sR If dic.exists(arr(i, 1)) = False Then k = k + 1 dic.Add arr(i, 1), k res(k, 1) = arr(i, 1) res(k, 2) = 1 Else ik = dic(arr(i, 1)) res(ik, 2) = res(ik, 2) + 1 End If Next i Application.DisplayAlerts = False Application.ScreenUpdating = False sR = sh.Range("F" & Rows.Count).End(xlUp).Row If sR > 2 Then sh.Range("F3:G" & sR).Clear sh.Range("F3").Resize(k, 2) = res sh.Range("F3").Resize(k, 2).Sort sh.Range("G3"), 1, sh.Range("F3"), , 1, Header:=xlNo For i = 3 To sR If sh.Range("G" & i) <> sh.Range("G" & i - 1) Then fR = i If sh.Range("G" & i) <> sh.Range("G" & i + 1) Then sh.Range("G" & fR, sh.Range("G" & i)).MergeCells = True End If Next i sh.Range("F3").Resize(k, 2).Borders.LineStyle = 1 sh.Range("G3").Resize(k).HorizontalAlignment = xlCenter sh.Range("G3").Resize(k).VerticalAlignment = xlCenter Application.DisplayAlerts = True Application.ScreenUpdating = Tr [/QUOTE]
dạ, em cảm ơn anh ạ.Chạy code . . .
Mã:Sub xyz() Dim dic As Object, sh As Worksheet, arr(), res() Dim sR&, fR&, i&, k&, ik& Set dic = CreateObject("scripting.dictionary") Set sh = Sheets("Sheet2") arr = sh.Range("C3", sh.Range("C" & Rows.Count).End(xlUp)).Value sR = UBound(arr) ReDim res(1 To sR, 1 To 2) For i = 1 To sR If dic.exists(arr(i, 1)) = False Then k = k + 1 dic.Add arr(i, 1), k res(k, 1) = arr(i, 1) res(k, 2) = 1 Else ik = dic(arr(i, 1)) res(ik, 2) = res(ik, 2) + 1 End If Next i Application.DisplayAlerts = False Application.ScreenUpdating = False sR = sh.Range("F" & Rows.Count).End(xlUp).Row If sR > 2 Then sh.Range("F3:G" & sR).Clear sh.Range("F3").Resize(k, 2) = res sh.Range("F3").Resize(k, 2).Sort sh.Range("G3"), 1, sh.Range("F3"), , 1, Header:=xlNo For i = 3 To sR If sh.Range("G" & i) <> sh.Range("G" & i - 1) Then fR = i If sh.Range("G" & i) <> sh.Range("G" & i + 1) Then sh.Range("G" & fR, sh.Range("G" & i)).MergeCells = True End If Next i sh.Range("F3").Resize(k, 2).Borders.LineStyle = 1 sh.Range("G3").Resize(k).HorizontalAlignment = xlCenter sh.Range("G3").Resize(k).VerticalAlignment = xlCenter Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
dạ, em cảm ơn ạ.Gửi bạn ý tưởng làm Power query, hy vọng giúp được bạn:
View attachment 311074
Chỉnh lại code theo kết quả từng nhóm.Nhờ các anh chị hỗ trợ lọc cụm giá trị duy nhất và đếm số lần xuất hiện của cụm đó, em cảm ơn ạ. Có thể viết hàm hoặc code VBA ạ. Em có gửi file đính kèm
Sub xyz()
Dim dic As Object, sh As Worksheet, arr(), res()
Dim sR&, fRow&, i&, r&, k&, ik&
Set dic = CreateObject("scripting.dictionary")
Set sh = Sheets("Sheet2")
Application.DisplayAlerts = False
Application.ScreenUpdating = False
i = sh.Range("F" & Rows.Count).End(xlUp).Row
If i > 2 Then sh.Range("F3:G" & i).Clear
arr = sh.Range("A3", sh.Range("C" & Rows.Count).End(xlUp)).Value
sR = UBound(arr)
ReDim res(1 To sR, 1 To 4)
fRow = 3 'Dong dau cua bang ket qua
For i = 1 To sR
If arr(i, 1) <> Empty Then r = i
res(r, 3) = res(r, 3) & "|" & arr(i, 3)
res(r, 4) = res(r, 4) + 1
Next i
For i = 1 To sR
If arr(i, 1) <> Empty Then
If dic.exists(res(i, 3)) = False Then
dic.Add res(i, 3), k + 1
sh.Range("G" & k + fRow).Resize(res(i, 4)).MergeCells = True
For r = 1 To res(i, 4)
k = k + 1
res(k, 1) = arr(i + r - 1, 3)
Next r
End If
ik = dic(res(i, 3))
res(ik, 2) = res(ik, 2) + 1
End If
Next i
sh.Range("F3").Resize(k, 2) = res
sh.Range("F3").Resize(k, 2).Borders.LineStyle = 1
sh.Range("G3").Resize(k).HorizontalAlignment = xlCenter
sh.Range("G3").Resize(k).VerticalAlignment = xlCenter
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub



