Dùng dictionary để xoá range tương ứng với giá trị duy nhất được không ah?

Liên hệ QC

Lequocvan

Thành viên thường trực
Tham gia
21/8/07
Bài viết
364
Được thích
128
Donate (Paypal)
Donate
Donate (Momo)
Donate
Giới tính
Nam
Nghề nghiệp
Agribank
ABCDE
1l1c2l1c3l1c4l1c5
2l2c2l2c3l2c4l2c5
1abce
50141285432198
81027314932
Dùng dictionary có thể làm được việc: Tìm ở cột A, khi thấy giá trị duy nhất thì xoá cả dòng hoặc xoá range tương ứng không ah?
 
Vậy kết quả không còn hai dòng có giá trị 1 ở cột A phải không?
 
Upvote 0
Tại sao lại phải hỏi? Tự thử có mất tiền đâu?
Khi nào không được thì lên hỏi tiếp.
 
Upvote 0
Vậy kết quả không còn hai dòng có giá trị 1 ở cột A phải không?
Ngược lại ah, tìm ở cột A thấy giá trị duy nhất thì xoá dòng đó ah.
Bài đã được tự động gộp:

Tại sao lại phải hỏi? Tự thử có mất tiền đâu?
Khi nào không được thì lên hỏi tiếp.
em thử các kiểu con đà điểu mà chưa ra, nên mới hỏi ah, mong được mọi người chỉ giúp
 
Upvote 0
...
em thử các kiểu con đà điểu mà chưa ra, nên mới hỏi ah, mong được mọi người chỉ giúp
Các kiểu gồm có những kiểu nào?
Từ đầu, bạn đòi hỏi đít sần. Có nghĩa là bạn muốn biết khả năng của đít sần, và không cần biết đến các giải pháp khác?
 
Upvote 0
Các kiểu gồm có những kiểu nào?
Từ đầu, bạn đòi hỏi đít sần. Có nghĩa là bạn muốn biết khả năng của đít sần, và không cần biết đến các giải pháp khác?
em loay hoay với dictionary rồi nhưng không ra kết quả được ah. Có lẽ tại em chưa nắm vững dictionary
 
Upvote 0
Nói tùm lum cả buổi ròi bạn vẫn chưa cho biết hai điều tối quan trộng:

1. xác định phải dùng đít sần, cách khác không được?

2. đưa hình lên cho biết nếu đít sần đít mụn gì đó thành công thì kết quả ra sao?
 
Upvote 0
Bài này chạy lặp 2 vòng của dữ liệu có được không bà con nhỉ? Tạm thời tôi chỉ nghĩ được cách như vậy.
 
Upvote 0
em loay hoay với dictionary rồi nhưng không ra kết quả được ah. Có lẽ tại em chưa nắm vững dictionary
Có thể xóa dễ dàng trên sheet. Nhưng vì bạn muốn tìm hiểu các dùng dic nên mình cũng mạn phép đưa ra hướng giải như sau:
Dùng 2 vòng lặp.
Đầu tiên nạp data vào mảng rng (để tăng tốc code)
PHP:
rng = Range("A1:E" & Cells(Rows.Count, "A").End(xlUp).Row).Value

Vòng lặp 1: Duyệt qua cột A, nếu xuất hiện lần đầu tiên thì nạp item cho nó là số thứ tự dòng, từ lần 2 thì nạp "x" (hoặc ký tự bất kỳ)
PHP:
For i = 1 To UBound(rng)
    If Not dic.exists(rng(i, 1)) Then
        dic.Add rng(i, 1), i
    Else
        dic(rng(i, 1)) = "x"
    End If
Next
Khi vòng lặp kết thúc thì dic đã được nạp xong, các key của nó có 2 loại item: là số (nếu duy nhất) hoặc là ký tự "x" (nếu lặp 2 lần trở lên)

Vòng lặp 2: Duyệt qua key của dic, kiểm tra item có phải là số hay không. Nếu là số thì xóa dòng tương ứng.
PHP:
For Each key In dic.keys
    If IsNumeric(dic(key)) Then Cells(dic(key), 1).Interior.Color = vbYellow
Next
Ở đây tôi test trước bằng cách tô màu cho cell để bạn dễ dàng kiểm tra. Sau đó muốn xóa cell, range hay cả dòng thì tùy ý
VD: Xóa range:
PHP:
If IsNumeric(dic(key)) Then Cells(dic(key), 1).Resize(1, 5).ClearContents
 

File đính kèm

  • Book1.xlsm
    19 KB · Đọc: 6
Upvote 0
Bài trên làm sai rồi.
Với hình bài #1 thì sau khi xóa sẽ còn hai dòng có giá trị 1.
Có lẽ bác nhầm chăng?
Sau khi chạy code thì các ô duy nhất sẽ được tô màu (để test, Sau đó delete range hay dòng thì tùy chủ thớt.)Capture.JPG
 
Upvote 0
Đấy là lời của chủ thớt nhé bác. :)
Em thấy chủ thớt nói có gì mâu thuẫn đâu nhỉ?
"Thấy giá trị duy nhất thì xóa", nghĩa là số 1 (xuất hiện 2 lần, không phải duy nhất) sẽ được giữ lại
Sau đó bác hỏi nghĩa là số 1 sẽ bị xóa?
Thì thớt phủ định, nghĩa là số 1 không bị xóa.
 
Upvote 0
Thông thường với dữ liệu ngần ấy dòng thì chủ bài thông báo điều đó ngay từ đầu rồi anh.
Mình có thói quen khi giải bài là mặc định làm việc với data lớn.
Nếu dùng COUNTIF thì phải dùng cột phụ?
Trường hợp này là chủ thớt muốn thực tập dùng dictionary thôi.
 
Upvote 0
Web KT
Back
Top Bottom