Học Dictionary qua các ví dụ đơn giản!

Liên hệ QC

chuot0106

Thành viên gắn bó
Tham gia
20/1/13
Bài viết
2,567
Được thích
1,670
Thực sự thì mình cũng chưa biết tên topic như vậy có hợp lí không(Nếu chưa hợp lí mong BQT sửa giúp), mình nêu mục đích của topic này luôn.
Bởi vì trên GPE đã có topic về vấn đề này rồi tuy nhiên các topic đó cũng chưa đi sâu lắm về "Dic" bản thân mình rất khó tiếp thu(cá nhân mình thôi). bởi vậy mình xin phép BQT được lập Topic mới này giành cho những người mới chập chững nghiên cứu về "Dic" như mình với mục đích chính như sau:
+ Mong các bạn có kinh nghiệm về "Dic" vào chia sẻ kinh nghiệm của bả n thân về việc học "Dic".
+ Các bạn có kinh nghiệm về "Dic" đưa ra các bài tập từ cơ bản đến đến nâng cao để các thành viên mới thực hành.
+ Các thành viên mới có thể đưa ra các câu hỏi cũng như bài tập liên quan để các thành viên có kinh nghiệm giúp đỡ.

Tất cả các mục đích này dựa trên tinh thần chia sẻ, giao lưu, học hỏi.
Rất mong nhận được sự chia sẻ của các bạn!
 
Cảm ơn bạn mình đã hình dung ra rồi
Một lần nữa cảm ơn các anh, chúc các anh nhiều sức khỏe và thành đạt trong cuộc sống
 
Upvote 0
Lời giả của em về câu hỏi 1 em đưa ra ở #2, có tham khảo bài của Mr.Bum. Em làm trên mảng. Mong các bạn góp ý!
Mã:
Option Explicit


Public Sub cauhoi1_dic()
Dim arr(), tam(), dic As Object, i As Long, j As Long
    arr = Sheet1.Range("A2:B10")
    ReDim tam(1 To UBound(arr, 1), 1 To UBound(arr, 2))
Set dic = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(arr, 1)
        If Not dic.exists(arr(i, 1)) Then
            j = j + 1
            dic.Add arr(i, 1), j
            tam(j, 1) = arr(i, 1)
            tam(j, 2) = arr(i, 2)
        End If
    Next i
        Sheet1.Range("F2").Resize(j, UBound(arr, 2)).Value = tam
End Sub

Xin chào các bạn,
Tôi tải tâp tin và code tại bài này về và thử làm một code sau để học Dictionary... và kết quả không giống như kết quả mẫu.
Tôi gửi code, nhờ các bạn xem và giúp tôi với ạ.
Mã:
Option Explicit

Function LastRowInOneColumn(Sheet As Worksheet, Ten_Cot As String) As Long
    LastRowInOneColumn = Sheet.Cells(Sheet.Rows.Count, Ten_Cot).End(xlUp).Row
End Function

Sub HocDic_1()

    Dim MyDic As Scripting.Dictionary
    Set MyDic = New Scripting.Dictionary
    
    Dim Sh As Worksheet, Key As String
    Dim i As Long, j As Long, k As Long, dongcuoi As Long
    Dim dauvao As Variant, daura As Variant
    
    Set Sh = ThisWorkbook.Worksheets("Sheet1")
    
    dongcuoi = LastRowInOneColumn(Sh, "B")
    If dongcuoi < 2 Then Exit Sub
    
    dauvao = Sh.Range("A2:B" & dongcuoi).Value
    
    ReDim daura(UBound(dauvao, 1), UBound(dauvao, 2))
    
    For i = 1 To UBound(dauvao, 1)
        Key = dauvao(i, 1)
        If MyDic.Exists(Key) = False Then
            k = k + 1
            MyDic.Add Key, k
            For j = 1 To UBound(dauvao, 2)
                daura(k, j) = dauvao(i, j)
            Next j
            Debug.Print daura(k, 1) & "-" & daura(k, 2)
        End If
    Next i
    
    Sh.Range("F2").Resize(100, 2).ClearContents
    Debug.Print "Row:" & k & "-" & "Col:" & UBound(daura, 2)
    
    If k > 0 Then Sh.Range("F2").Resize(k, UBound(daura, 2)).Value = daura
    
    Set MyDic = Nothing
    
End Sub
 
Upvote 0
Xin chào các bạn,
Tôi tải tâp tin và code tại bài này về và thử làm một code sau để học Dictionary... và kết quả không giống như kết quả mẫu.
Tôi gửi code, nhờ các bạn xem và giúp tôi với ạ.
Mã:
Option Explicit

Function LastRowInOneColumn(Sheet As Worksheet, Ten_Cot As String) As Long
    LastRowInOneColumn = Sheet.Cells(Sheet.Rows.Count, Ten_Cot).End(xlUp).Row
End Function

Sub HocDic_1()

    Dim MyDic As Scripting.Dictionary
    Set MyDic = New Scripting.Dictionary
   
    Dim Sh As Worksheet, Key As String
    Dim i As Long, j As Long, k As Long, dongcuoi As Long
    Dim dauvao As Variant, daura As Variant
   
    Set Sh = ThisWorkbook.Worksheets("Sheet1")
   
    dongcuoi = LastRowInOneColumn(Sh, "B")
    If dongcuoi < 2 Then Exit Sub
   
    dauvao = Sh.Range("A2:B" & dongcuoi).Value
   
    ReDim daura(UBound(dauvao, 1), UBound(dauvao, 2))
   
    For i = 1 To UBound(dauvao, 1)
        Key = dauvao(i, 1)
        If MyDic.Exists(Key) = False Then
            k = k + 1
            MyDic.Add Key, k
            For j = 1 To UBound(dauvao, 2)
                daura(k, j) = dauvao(i, j)
            Next j
            Debug.Print daura(k, 1) & "-" & daura(k, 2)
        End If
    Next i
   
    Sh.Range("F2").Resize(100, 2).ClearContents
    Debug.Print "Row:" & k & "-" & "Col:" & UBound(daura, 2)
   
    If k > 0 Then Sh.Range("F2").Resize(k, UBound(daura, 2)).Value = daura
   
    Set MyDic = Nothing
   
End Sub

Xin lỗi mọi người tôi hiểu rồi:
Sửa:
ReDim daura(UBound(dauvao, 1), UBound(dauvao, 2))
Thành:
ReDim daura(1 To UBound(dauvao, 1), 1 To UBound(dauvao, 2))

Hic!
 
Upvote 0
Xin chào các bạn,
Tôi tải tâp tin và code tại bài này về và thử làm một code sau để học Dictionary... và kết quả không giống như kết quả mẫu.
Tôi gửi code, nhờ các bạn xem và giúp tôi với ạ.
Mã:
Option Explicit

Function LastRowInOneColumn(Sheet As Worksheet, Ten_Cot As String) As Long
    LastRowInOneColumn = Sheet.Cells(Sheet.Rows.Count, Ten_Cot).End(xlUp).Row
End Function

Sub HocDic_1()

    Dim MyDic As Scripting.Dictionary
    Set MyDic = New Scripting.Dictionary
 
    Dim Sh As Worksheet, Key As String
    Dim i As Long, j As Long, k As Long, dongcuoi As Long
    Dim dauvao As Variant, daura As Variant
 
    Set Sh = ThisWorkbook.Worksheets("Sheet1")
 
    dongcuoi = LastRowInOneColumn(Sh, "B")
    If dongcuoi < 2 Then Exit Sub
 
    dauvao = Sh.Range("A2:B" & dongcuoi).Value
 
    ReDim daura(UBound(dauvao, 1), UBound(dauvao, 2))
 
    For i = 1 To UBound(dauvao, 1)
        Key = dauvao(i, 1)
        If MyDic.Exists(Key) = False Then
            k = k + 1
            MyDic.Add Key, k
            For j = 1 To UBound(dauvao, 2)
                daura(k, j) = dauvao(i, j)
            Next j
            Debug.Print daura(k, 1) & "-" & daura(k, 2)
        End If
    Next i
 
    Sh.Range("F2").Resize(100, 2).ClearContents
    Debug.Print "Row:" & k & "-" & "Col:" & UBound(daura, 2)
 
    If k > 0 Then Sh.Range("F2").Resize(k, UBound(daura, 2)).Value = daura
 
    Set MyDic = Nothing
 
End Sub
Có cần thiết phải dùng nguyên cái hàm để lấy dòng cuối không vậy? Trình độ cơ bản mà làm vậy chi? Theo mình thì chỉ tự làm khó mình chứ không ích gì đâu. Tại sao chúng ta phải dùng hàm? Mình nghĩ là khi những dòng code phải viết đi viết lại nhiều lần trong sub thì nên dùng hàm riêng cho gọn code. Góp ý cho vui thôi nhé
 
Upvote 0
Có cần thiết phải dùng nguyên cái hàm để lấy dòng cuối không vậy? Trình độ cơ bản mà làm vậy chi? Theo mình thì chỉ tự làm khó mình chứ không ích gì đâu. Tại sao chúng ta phải dùng hàm? Mình nghĩ là khi những dòng code phải viết đi viết lại nhiều lần trong sub thì nên dùng hàm riêng cho gọn code. Góp ý cho vui thôi nhé
Xin chào anh quanghai1969
Cảm ơn anh đã góp ý cho OT.
OT hay quên không nhớ code nên mới sử dụng cái hàm để lấy dòng cuối, hơn nữa cũng là tập làm quen để kết hợp gọi hàm, gọi thủ tục để quen với code thôi anh ạ. hihi
 
Upvote 0
Web KT
Back
Top Bottom