giúp code kiểm tra trùng lặp giữa các cột (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

doantrungtuan

Thành viên mới
Tham gia
1/11/19
Bài viết
16
Được thích
0
Trong VBA. Mình dùng hàm IF như sau:
If Sheet3.Cells(i, 3) = Sheet4.Cells(i, 4) Or Sheet3.Cells(i, 3) = Sheet4.Cells(i, 9) Or Sheet3.Cells(i, 3) = Sheet4.Cells(i, 14) = "TRUE" Then
KT = KT + 1
End If
Mình kiểm tra thì kết quả rất đúng. Nhưng mình còn nhiều đối chiếu Sheet3.Cells(i, 3) với nhiều cột nữa ở sheet4 (mỗi cột cách nhau 5 cột: 4-9-14-19-24-29-.....). Nhưng dòng code dài quá nên VBA không cho phép (tổng cộng còn 21 cột nữa ở sheet4). Nhờ anh chị rút gọn code dùm mình với.
 
Code dài quá vba không cho. Mình xuống dòng được rồi. Thanks!
 
Code dài quá vba không cho. Mình xuống dòng được rồi. Cảm ơn!
Muốn xuống dòng thì làm thế này:
Chọn trước chữ Or rồi gõ phím dài và nhấn Shift + dấu trừ (bên dưới nút F12), xong nhấn Enter, ta được như bên dưới.

Mã:
If Sheet3.Cells(i, 3) = Sheet4.Cells(i, 4) _
Or Sheet3.Cells(i, 3) = Sheet4.Cells(i, 9) _
Or Sheet3.Cells(i, 3) = Sheet4.Cells(i, 14) = "TRUE" Then
 
Muốn xuống dòng thì làm thế này:
Chọn trước chữ Or rồi gõ phím dài và nhấn Shift + dấu trừ (bên dưới nút F12), xong nhấn Enter, ta được như bên dưới.

Mã:
If Sheet3.Cells(i, 3) = Sheet4.Cells(i, 4) _
Or Sheet3.Cells(i, 3) = Sheet4.Cells(i, 9) _
Or Sheet3.Cells(i, 3) = Sheet4.Cells(i, 14) = "TRUE" Then
Cám ơn bạn nhiều!
 
Trong VBA. Mình dùng hàm IF như sau:
If Sheet3.Cells(i, 3) = Sheet4.Cells(i, 4) Or Sheet3.Cells(i, 3) = Sheet4.Cells(i, 9) Or Sheet3.Cells(i, 3) = Sheet4.Cells(i, 14) = "TRUE" Then
KT = KT + 1
End If
Mình kiểm tra thì kết quả rất đúng. ...
Sheet3.Cells(i, 3) = Sheet4.Cells(i, 14) = "TRUE"
VBA không có tính chất dẫn độ (piping), và toán tử = không có tính chất truyền như luận lý toán học.
A = B = C trong luận lý toán học được hiểu là A = B Và B = C (và A = C)
Nhưng trong VBA, biểu thức này được tính từng giai đoạn. Tức là xét A = B, và đem kết quả so sánh với C.

Như vậy:
Sheet3.Cells(i, 3) = Sheet4.Cells(i, 14) luôn luôn là True hoặc False
Đem kết quả này so với "TRUE" thì VBA sẽ ép kiểu True thành "True" và False thành "False"
Suy ra, biểu thức trên luôn luôn cho ra False. ("True" <> "TRUE")

Câu "Mình kiểm tra thì kết quả rất đúng" của thớt là do kiểm tra chưa kỹ.

Nếu muốn so sánh thực sự thì phải là:
UCase(Sheet3.Cells(i, 3)) = Sheet4.Cells(i, 14) = "TRUE", hoặc
Sheet3.Cells(i, 3) = Sheet4.Cells(i, 14) = "True", hoặc
Sheet3.Cells(i, 3) = Sheet4.Cells(i, 14)

Đó là nói theo lô gic. Nhưng tôi nghĩ thớt muốn
Sheet3.Cells(i, 3) = "TRUE" And Sheet4.Cells(i, 14) = "TRUE"
 
Sheet3.Cells(i, 3) = Sheet4.Cells(i, 14) = "TRUE"
VBA không có tính chất dẫn độ (piping), và toán tử = không có tính chất truyền như luận lý toán học.
A = B = C trong luận lý toán học được hiểu là A = B Và B = C (và A = C)
Nhưng trong VBA, biểu thức này được tính từng giai đoạn. Tức là xét A = B, và đem kết quả so sánh với C.

Như vậy:
Sheet3.Cells(i, 3) = Sheet4.Cells(i, 14) luôn luôn là True hoặc False
Đem kết quả này so với "TRUE" thì VBA sẽ ép kiểu True thành "True" và False thành "False"
Suy ra, biểu thức trên luôn luôn cho ra False. ("True" <> "TRUE")

Câu "Mình kiểm tra thì kết quả rất đúng" của thớt là do kiểm tra chưa kỹ.

Nếu muốn so sánh thực sự thì phải là:
UCase(Sheet3.Cells(i, 3)) = Sheet4.Cells(i, 14) = "TRUE", hoặc
Sheet3.Cells(i, 3) = Sheet4.Cells(i, 14) = "True", hoặc
Sheet3.Cells(i, 3) = Sheet4.Cells(i, 14)

Đó là nói theo lô gic. Nhưng tôi nghĩ thớt muốn
Sheet3.Cells(i, 3) = "TRUE" And Sheet4.Cells(i, 14) = "TRUE"
Cám ơn bạn. Mình đã hiểu thêm vấn đề. Cám ơn bạn nhiều. Mình không cần AND. Vì chỉ cần kiểm tra có 1 điều kiện trong vô số điều kiện trùng là đủ
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom