Cái này bạn thử thí nghiệm nó tý là ra ngay thôi mà:Gửi Anh (Chị) và các bạn!
Mình có làm 1 ví dụ nhỏ sử dụng Dictionary nhưng khi chạy code nó cứ báo lỗi Type mismatch nhưng mình không nhìn ra cái sai trong code nên mình gửi file lên GPE mong Anh(Chị) và các bạn giúp đỡ!
r.Rows.Count= 4 nên i chạy tới 4 thì....nghỉ theo lệnh của bạnSet r = Union(r1, r2)
For i = 1 To r.Rows.Count
Nếu hông có thằng r(i,1) thì gán thằng Cells(i, 1), híc, mà thằng Cells(i, 1) khi i chạy từ 1 đến 4 sẽ là cell [A1] đến cell [A4], sao ngộ "dzị" taIf Not Dic.Exists(r(i, 1)) Then
Dic.Add Cells(i, 1), ""
Gửi Anh (Chị) và các bạn!
Mình có làm 1 ví dụ nhỏ sử dụng Dictionary nhưng khi chạy code nó cứ báo lỗi Type mismatch nhưng mình không nhìn ra cái sai trong code nên mình gửi file lên GPE mong Anh(Chị) và các bạn giúp đỡ!
Nguyên nhân thì bác concogia đã nêu ra rồi. Tôi chỉ đưa ra một hướng xử lý hơi khác một chút xíu để bạn tham khảo:Gửi Anh (Chị) và các bạn!
Mình có làm 1 ví dụ nhỏ sử dụng Dictionary nhưng khi chạy code nó cứ báo lỗi Type mismatch nhưng mình không nhìn ra cái sai trong code nên mình gửi file lên GPE mong Anh(Chị) và các bạn giúp đỡ!
Xin cảm ơn Anh(Chị) và các bạn rất nhiều, một ví dụ nho nhỏ không ngờ lại phức tạp thế.Nguyên nhân thì bác concogia đã nêu ra rồi. Tôi chỉ đưa ra một hướng xử lý hơi khác một chút xíu để bạn tham khảo:
[GPECODE=vb]Sub NgayDuyNhat()
Dim r1 As Range, r2 As Range, Cll As Range
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
Set r1 = Sheet1.Range("A31:A" & Sheet1.Range("A65536").End(xlUp).Row)
Set r2 = Sheet1.Range("O31:O" & Sheet1.Range("O65536").End(xlUp).Row)
For Each Cll In Union(r1, r2)
If Not Dic.Exists(CLng(Cll.Value)) Then Dic.Add CLng(Cll.Value), ""
Next
If Dic.Count Then Sheet2.[B1].Resize(Dic.Count) = Application.Transpose(Dic.Keys)
Set Dic = Nothing
End Sub[/GPECODE]
Ở code này, việc sử dụng hàm CLng là cần thiết để tránh trường hợp ngày tháng đảo lộn giữa nguồn và đích. Bạn cứ thử bỏ hàm này trong câu lệnh If trong vòng For sẽ thấy ngay điều này.
Thêm một If để bẫy lỗi dữ liệu không phải Date thử xem:Xin cảm ơn Anh(Chị) và các bạn rất nhiều, một ví dụ nho nhỏ không ngờ lại phức tạp thế.
Mình có chạy thử code của 2 bạn nghiaphuc và nmhung49 đều cho ra kết quả nhưng khi cột O không có dữ liệu thì nó lại gây ra lỗi ở dòng If Not Dic...
Mong nhận được sự giúp đỡ của các bạn!
Sub NgayDuyNhat()
Dim Dic As Object, i As Long, r1 As Range, r2 As Range, Cll As Range, Tem As Long
Set Dic = CreateObject("Scripting.Dictionary")
With Sheet1
Set r1 = .Range(.[A31], .[A65536].End(xlUp))
Set r2 = .Range(.[O31], .[O65536].End(xlUp))
End With
For Each Cll In Union(r1, r2)
If IsDate(Cll) Then
Tem = Cll * 1
If Not Dic.Exists(Tem) Then
Dic.Add Tem, ""
End If
End If
Next Cll
If Dic.Count Then Sheet2.Range("B1").Resize(Dic.Count, 1) = Application.Transpose(Dic.Keys)
Set r1 = Nothing: Set r2 = Nothing: Set Dic = Nothing
End Sub