Option Explicit
Sub kiemtra()
Dim lr&, i&, rng As Range, cell As Range, dk1 As Range, dk2 As Range
Set dk1 = Sheets("Dieukien1").Range("F18").CurrentRegion
Set dk2 = Sheets("Dieukien2").Range("C2").CurrentRegion
With Sheets("Nhaplieu")
lr = .Cells(Rows.Count, "H").End(xlUp).Row
Set rng = .Range("H11:H" & lr)
End With
For Each cell In rng
cell.Interior.Color = xlNone
With WorksheetFunction
If .CountIf(dk1, Left(cell, 3) & "*") = 0 Or .CountIf(dk2, cell) = 0 Then
cell.Interior.Color = vbYellow
End If
End With
Next
End Sub
Em thấy code này chạy kiểm tra thì đúng nhưng số liệu nhập của em nhiều nên chạy chậm, anh xem giúp em với ạ.Nhấn nút "KIỂM TRA" sau khi nhập liệu xong (nhập tay hoặc copy/paste)
Các ô không thỏa 2 điều kiện sẽ được bôi vàng
Mã:Option Explicit Sub kiemtra() Dim lr&, i&, rng As Range, cell As Range, dk1 As Range, dk2 As Range Set dk1 = Sheets("Dieukien1").Range("F18").CurrentRegion Set dk2 = Sheets("Dieukien2").Range("C2").CurrentRegion With Sheets("Nhaplieu") lr = .Cells(Rows.Count, "H").End(xlUp).Row Set rng = .Range("H11:H" & lr) End With For Each cell In rng cell.Interior.Color = xlNone With WorksheetFunction If .CountIf(dk1, Left(cell, 3) & "*") = 0 Or .CountIf(dk2, cell) = 0 Then cell.Interior.Color = vbYellow End If End With Next End Sub
đúng rồi anh, em cũng thấy em làm loằng ngoằng thật nhưng không biết làm cách nào cho ngắn lại. với dữ liệu của em nó nhiều dòng. nhờ anh sửa lại lỗi giúp em với, hoặc anh có code nào thì cho em tham khảo với anh nhé. em cảm ơn anh ạ.Không hiểu có mỗi 2 cái điều kiện đấy mà bạn làm cái code nó loằng ngoằng quá.
Bạn chỉ kiểm tra khi nhập 1 mã vào excel thôi mà sao lại kiểm tra lại tất cả.Em thấy code này chạy kiểm tra thì đúng nhưng số liệu nhập của em nhiều nên chạy chậm, anh xem giúp em với ạ.
Bài đã được tự động gộp:
đúng rồi anh, em cũng thấy em làm loằng ngoằng thật nhưng không biết làm cách nào cho ngắn lại. với dữ liệu của em nó nhiều dòng. nhờ anh sửa lại lỗi giúp em với, hoặc anh có code nào thì cho em tham khảo với anh nhé. em cảm ơn anh ạ.
đúng rồi bạn, chỉ kiểm tra khi nhập 1 mã vào excel thôi, nhưng kế cả trường hợp copy/dán thì cũng chỉ những mã đang dán đó thôi.Bạn chỉ kiểm tra khi nhập 1 mã vào excel thôi mà sao lại kiểm tra lại tất cả.
Danh sách mã hơn 1.000 mã, và dữ liệu nhập liệu thì hơn 500.000 dòng nên theo mình nghĩ nên dùng Dic mới chạy nhanh đượcBài này cần công việc của lập trình viên cao cấp, loại có kinh nghiệm với CSDL.
Phải bảo chủ bài cho biết:
- chu kỳ làm việc. Một ngày vô dữ liệu mấy lần. Và bao nhiêu dòng tất cả.
- hiện tại có bao nhiêu mã. Mức độ tăng của số mã.
Dựa vào đấy mà tính xem code kiểu nào.
Nếu bảng mã không lớn lắm, cỡ dưới 200 mã thì dùng hàm CountIfs hoặc tương tự để dò.
Nếu bảng lớn hơn chút thì dùng hàm Find, hoặc Match để dò. Find và Match gặp thì dừng, CountIfs phải xét hết.
Nếu bảng lớn quá thì dùng Đít sần, đặt trong biến toàn cục hoặc static.
Anh ơi nếu dùng biến toàn cục Public thì em biết.Nhưng mà dùng Static thì khi dữ liệu xóa đi nó cập nhập vào kiểu gì anh nhỉ.Kiểu như là em chạy biến Static khi nó thêm dữ liệu vào dic thì không sao nhưng mà trong trường hợp nó xóa dữ liệu đi thì dic bị thừa.Em tinh là không phải nạp lại dic nhiều lần ấy.Bài này cần công việc của lập trình viên cao cấp, loại có kinh nghiệm với CSDL.
Phải bảo chủ bài cho biết:
- chu kỳ làm việc. Một ngày vô dữ liệu mấy lần. Và bao nhiêu dòng tất cả.
- hiện tại có bao nhiêu mã. Mức độ tăng của số mã.
Dựa vào đấy mà tính xem code kiểu nào.
Nếu bảng mã không lớn lắm, cỡ dưới 200 mã thì dùng hàm CountIfs hoặc tương tự để dò.
Nếu bảng lớn hơn chút thì dùng hàm Find, hoặc Match để dò. Find và Match gặp thì dừng, CountIfs phải xét hết.
Nếu bảng lớn quá thì dùng Đít sần, đặt trong biến toàn cục hoặc static.
Cách 1: Chia sub/function ra ba phần. Một phần chuyên tìm, một phần chuyên nhét và một phần chuyên xóa. Cũng có thể tách ra 3 hàm con và nạp tham số dic.Anh ơi nếu dùng biến toàn cục Public thì em biết.Nhưng mà dùng Static thì khi dữ liệu xóa đi nó cập nhập vào kiểu gì anh nhỉ.Kiểu như là em chạy biến Static khi nó thêm dữ liệu vào dic thì không sao nhưng mà trong trường hợp nó xóa dữ liệu đi thì dic bị thừa.Em tinh là không phải nạp lại dic nhiều lần ấy.
Nhờ bạn khi xóa dữ liệu nhập liệu ở cột H thì cột G cũng xóa luôn giúp mình với, cảm ơn bạn nhiềuThử cái file này hơn 5 ký tự.