Lập trình để kiểm tra dữ liệu trùng lặp ở một cột bất kỳ

Liên hệ QC

itbinhdinh

Thành viên mới
Tham gia
27/3/10
Bài viết
20
Được thích
2
Chào các bác pro trong diễn đàn. Em có file Excel này muốn nhờ các bác giúp đỡ.

Em muốn kiểm tra dữ liệu ở cột B xem có cái nào trùng với cái nào trong cột B không. Dữ liệu đưa vào cột B là một máy quét mã vạch sẻ đưa vào từ dòng thứ nhất (B1) đến dòng cuối cùng của cột B. Nếu trùng thì sẻ báo cho người sử dụng biết để phân biệt loại hàng này ra.

Em muốn dùng VBA chứ dùng công thức thì kéo nhiều nên file nặng lắm.

Em có đính kèm file bên dưới.

Mong các bác dùng chút ít thời gian giúp đỡ em. Thanks a lots.
 

File đính kèm

Bạn thử đoạn code sau nhé!
Sub kiemtra()
Dim i As Integer
Dim j As Integer
Dim DL As Variant
For i = 5 To 30000
If Cells(i, 2).Value = 0 Then Exit Sub
DL = Cells(i, 2).Value
For j = i + 1 To 30000
If Cells(j, 2).Value = 0 Then GoTo tiep
If Cells(j, 2).Value = DL Then
Cells(j, 2).Interior.ColorIndex = 3
End If
Next j
tiep:
Next i
End Sub
-------
 
Upvote 0
Bạn thử đoạn code sau nhé!
Sub kiemtra()
Dim i As Integer
Dim j As Integer
Dim DL As Variant
For i = 5 To 30000
If Cells(i, 2).Value = 0 Then Exit Sub
DL = Cells(i, 2).Value
For j = i + 1 To 30000
If Cells(j, 2).Value = 0 Then GoTo tiep
If Cells(j, 2).Value = DL Then
Cells(j, 2).Interior.ColorIndex = 3
End If
Next j
tiep:
Next i
End Sub
-------
Kiểm tra dữ liệu trùng nên dùng Collection hoặc Dictionary Object... Dùng code theo kiểu của bạn có mà... chết luôn
 
Upvote 0
Upvote 0
Không chết được đâu bác ơi! Em chỉ tô màu thôi chứ có động gì vào dữ liệu đâu mà sợ chứ!
Nói không bằng chứng... Thôi thì bạn cứ thử code của bạn trên dữ liệu 3000 tôi giả lập đây xem ra kết quả trong thời gian bao lâu
(tôi có thê viết code chạy dưới 1 giây)
 

File đính kèm

Upvote 0
Nói không bằng chứng... Thôi thì bạn cứ thử code của bạn trên dữ liệu 3000 tôi giả lập đây xem ra kết quả trong thời gian bao lâu
(tôi có thê viết code chạy dưới 1 giây)
Oh! Em hiểu rồi. 2 vòng lặp for chồng vào nhau thì đúng là chạy gần như "vô tận". Đoạn code của bác hàn lâm quá, em chưa hiểu được. Không biết sách VBA mới phát hành có đề cập đến những vấn đề như thế này không ạ?
 
Upvote 0
Oh! Em hiểu rồi. 2 vòng lặp for chồng vào nhau thì đúng là chạy gần như "vô tận". Đoạn code của bác hàn lâm quá, em chưa hiểu được. Không biết sách VBA mới phát hành có đề cập đến những vấn đề như thế này không ạ?
Nói về Dictionary thì đã có nói rất nhiều trên GPE rồi... Tìm là thấy
Thật ra cách dùng nó rất đơn giản, chẳng hàn lâm gì đâu bạn à
 
Upvote 0
Cách for 2 lần đơn thuần là kỹ thuật duyệt tuyến tính, với cách duyệt này độ phức tạp là O(nx....xn). Với dữ liệu thử như trên mà duyệt kiểu này thì có nước đi uống cafe rồi quay lại.hehe Cách duyệt theo Dictionary theo mình hiểu gọi là kỹ thuật hash trong môn Cấu trúc dữ liệu II. Nếu bạn muốn nghiên cứu sâu về vấn đề này nên kiếm tài liệu về Cấu trúc dữ liệu II để đọc.
 
Upvote 0
Cách for 2 lần đơn thuần là kỹ thuật duyệt tuyến tính, với cách duyệt này độ phức tạp là O(nx....xn). Với dữ liệu thử như trên mà duyệt kiểu này thì có nước đi uống cafe rồi quay lại.hehe Cách duyệt theo Dictionary theo mình hiểu gọi là kỹ thuật hash trong môn Cấu trúc dữ liệu II. Nếu bạn muốn nghiên cứu sâu về vấn đề này nên kiếm tài liệu về Cấu trúc dữ liệu II để đọc.
Bạn nói làm cho vấn đề càng phức tạp thêm
Thật ra, để học và ứng dụng được Dictionary, bao đảm học trong.. 1 giờ là xong! (nói hơi quá, có khi chỉ cần.. 10 phút)
 
Upvote 0
Web KT

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

Back
Top Bottom