Tổng hợp dữ liệu (Sử dụng Dictionary)

Liên hệ QC

tueyennhi

Thành viên tích cực
Tham gia
18/10/10
Bài viết
1,192
Được thích
105
Chào anh chị, cho em hỏi: Em có sheets KQ và TH (với TH là tổng hợp tất cả dữ liệu). Làm thế nào em có thể lấy kết quả tại sheet KQ theo ý muốn với cột A là mã duy nhất và dòng 2 từ cột B là cột muốn lấy (em muốn khi em thay đổi con số cột hoặc mã duy nhất thì kết quả thay đổi theo sau khi chạy code). Em cảm ơn.

PHP:
Option Explicit
Private Sub TnDic()
    Dim Dic As Object, Col As Object, Ws As Worksheet, Tem As String, Rws As Long
    Dim R As Long, i As Long, j As Long, k As Long, C As Long, h As Long
    Dim sArr As Variant, dArr(1 To 500, 1 To 50)
    
    Set Dic = CreateObject("Scripting.Dictionary")
    Set Col = CreateObject("Scripting.Dictionary")
    
    
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    
    With Sheets("KQ")
        'Cot
        sArr = .Range("A2").Resize(100, 10).Value
        For j = 2 To 10
            If sArr(1, j) <> Empty Then
                 Col.Item(Day(sArr(1, j))) = j - 1
            End If
        Next j
        'Dong
        For j = 2 To 100
            If sArr(j, 1) <> Empty Then
                 Dic.Add sArr(j, 1), j - 1
            End If
        Next j
        
    End With
    
    With Sheets("TH")
        sArr = .Range("A6", .Range("A65000").End(xlUp)).Resize(, 50).Value2
        For j = 2 To UBound(sArr, 2)
            C = Col.Item(sArr(1, j))
            For i = 2 To UBound(sArr, 1)
                Tem = sArr(i, 1)
                If Len(sArr(i, 1)) > 0 Then
                    If Dic.Exists(Tem) Then
                        Rws = Dic.Item(Tem)
                        dArr(Rws, C) = sArr(i, j)
                    End If
                End If
            Next i
        Next j
    End With
    
    Sheets("KQ").Range("B3").Resize(10, 10) = dArr
    Set Dic = Nothing
    Set Col = Nothing
 
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
   
End Sub

Em có thử viết code sau mà loay hoay mãi không biết sai ở đâu.
 

File đính kèm

Lần chỉnh sửa cuối:
Kết quả như em mong muốn rồi anh ạ, nhưng về tốc độ thì không bằng Dic được. Thật sự thì em thích sử dụng Dic vì nó mạnh :D
Bài đã được tự động gộp:


À trường hợp này không an toàn vì có thể việc kết hợp giữa dòng và cột làm key chưa chắc chắn. Ví dụ một ID là 10 và cột là 19 với một ID là 101 và cột là 9.
cái này thì mình có thể thêm ký tự mà đâu nhất thiết phải gộp 2 dk ta có thể thêm dấu "-" ngăn cách cũng không sao
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom