Đây là code mình đã chỉnh đến lần 4 do yêu cầu bạn đưa từ ban đầu không rõ ràng & đầy đủ.
Nếu còn vấn đề gì nữa cho chủ đề và vấn đề này của bạn thì bạn tự mình tìm hiểu rồi tự giải quyết nhé.
Bởi có thể các yêu cầu tiếp khác sẽ thay đổi lại toàn bộ cách làm như đập đi làm lại vậy.
Qua đây mình cũng cảm ơn bạn rất nhiều vì đã đóng góp ủng hộ diễn đàn.
Mình rất khuyến khích học và hỏi nhiều ,nhưng không phải cứ đóng góp là có thể cùng một vấn đề ban đầu mà có thể viết bài khó hiểu và nhỏ giọt lắt nhắt... dẫn đến mãi chưa có sự kết thúc. Do đó bạn cần phải đưa trường hợp tổng quát nhất.
Nếu bạn có vấn đề gì khác thì có thể hỏi, nếu trong điều kiện khả năng thì mình sẽ cố giúp.
Dưới đây là code chỉnh lại lần 4:
Nếu còn vấn đề gì nữa cho chủ đề và vấn đề này của bạn thì bạn tự mình tìm hiểu rồi tự giải quyết nhé.
Bởi có thể các yêu cầu tiếp khác sẽ thay đổi lại toàn bộ cách làm như đập đi làm lại vậy.
Qua đây mình cũng cảm ơn bạn rất nhiều vì đã đóng góp ủng hộ diễn đàn.
Mình rất khuyến khích học và hỏi nhiều ,nhưng không phải cứ đóng góp là có thể cùng một vấn đề ban đầu mà có thể viết bài khó hiểu và nhỏ giọt lắt nhắt... dẫn đến mãi chưa có sự kết thúc. Do đó bạn cần phải đưa trường hợp tổng quát nhất.
Nếu bạn có vấn đề gì khác thì có thể hỏi, nếu trong điều kiện khả năng thì mình sẽ cố giúp.
Dưới đây là code chỉnh lại lần 4:
Mã:
Option Explicit
Const CRV__ As String = "https://tuhocvba.net/"
Public Sub THVBA_CRV___4()
'//Khai bao tham so
Dim Dic As Object, sheet As Worksheet, cell As Range
Dim data As Variant, result As Variant, ma As Variant, Key As Variant
Dim i As Long, j As Long, k As Long, n As Long, r As Long
Dim c As Integer, colMa As Integer, Tmr As Double
Tmr = Timer()
'// Xac dinh mang du lieu dau vao & kich thuoc mang ket qua dau ra
Set sheet = ThisWorkbook.Worksheets("DL_N")
If sheet.AutoFilterMode Then sheet.AutoFilterMode = False
data = sheet.Range("C3").CurrentRegion.Value
Set sheet = ThisWorkbook.Worksheets("T_H")
If sheet.AutoFilterMode Then sheet.AutoFilterMode = False
r = sheet.Cells(sheet.Rows.Count, 2).End(xlUp).Row
c = sheet.Cells(3, sheet.Columns.Count).End(xlToLeft).Column
If (r < 4) Or (c < 3) Then Exit Sub
'// Khoi tao Dictionary
Set Dic = CreateObject("Scripting.Dictionary")
Dic.CompareMode = vbTextCompare
result = sheet.Range("A3:A" & r).Resize(, c).Value
For j = 3 To c Step 3
Key = result(1, j)
If Not Dic.Exists(Key) And Len(Key) > 0 Then
Dic.Add Key, j: sheet.Cells(4, j).Resize(10000).ClearContents
End If
Next j
For i = 2 To UBound(result, 1)
Key = result(i, 2)
If Not Dic.Exists(Key) And Len(Key) > 0 Then Dic.Add Key, i
Next i
n = UBound(data, 2): colMa = 9
'// Xu ly tong hop du lieu theo ma & phan loai ma
For i = 2 To UBound(data, 1)
For j = 1 To colMa
If Len(data(i, j)) > 0 Then
Key = data(i, j)
If Dic.Exists(Key) Then
r = Dic.Item(Key)
For c = colMa + 1 To n
Key = data(1, c)
If Dic.Exists(Key) Then
result(r, Dic.Item(Key)) = _
result(r, Dic.Item(Key)) + data(i, c)
End If
Next c
End If
End If
Next j
Next i
r = UBound(result, 1): c = UBound(result, 2)
sheet.Range("A3").Resize(r, c).Value = result
'//Thong bao ket thuc
Tmr = WorksheetFunction.Round(Timer() - Tmr, 2)
MsgBox "Done and success, " & vbNewLine & "processing time is: " & Tmr & " seconds.", _
vbInformation + vbOKOnly, CRV__
End Sub