Nhờ sửa lỗi code kiểm tra 2 điều kiện khi nhập liệu

Liên hệ QC

lp0072021

Thành viên chính thức
Tham gia
23/8/22
Bài viết
60
Được thích
3
Em nhờ các anh chị diễn đàn sửa giúp em code bị lỗi thực hiện kiểm tra 2 điều kiện khi nhập liệu như nội dung file đính kèm. Em cảm ơn các anh chị.
 

File đính kèm

  • Loikhongchaylenh.xlsm
    5.2 MB · Đọc: 8
Em nhờ các anh chị diễn đàn sửa giúp em code bị lỗi thực hiện kiểm tra 2 điều kiện khi nhập liệu như nội dung file đính kèm. Em cảm ơn các anh chị.
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á.
 
Upvote 0
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
 

File đính kèm

  • Kiemtra.xlsm
    5.2 MB · Đọc: 10
Upvote 0
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
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:

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á.
đú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 ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
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 ạ.
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ả.
 
Upvote 0
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.
 
Upvote 0
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.
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 được
 
Upvote 0
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.
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.
 
Upvote 0
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.
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.
Static chỉ là để bảo vệ nó không cho hàm khác nhìn thấy. Muốn xía vào thì phải dùng tham.
Public mọi nơi đều thấy và tuy tiện lợi hơn nhưng hơi kém an toàn hơn.

Cách 2: Nhét bằng cách cho item = 0. Xóa bằng cách cho item = -1.
 
Upvote 0
Web KT

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

Back
Top Bottom