thông báo dữ liệu lấy vào không đúng với yêu cầu

  • Thread starter Thread starter LOIKS
  • Ngày gửi Ngày gửi
Liên hệ QC

LOIKS

Thành viên chính thức
Tham gia
10/8/18
Bài viết
97
Được thích
7
chào mọi người
mình có 1 file dữ liệu sau đây, mình muốn kiểm tra dữ liệu đầu vào đúng theo yêu cầu bài toán
cụ thể là nếu 3 kí tự cuối cùng của cột "D" không phải là "MAX" hoặc không phải "MIN" thì msgbox thông báo là lấy dữ liệu vào không chính xác, mình có lập code như sau mà chắc là sai mong mọi người giúp đỡ
For i = 2 To 100
If Right(Cells(i, "D"), 3) <> "MAX" Then
MsgBox ("SAI DU LIEU")
Exit For
End If
If Right(Cells(i, "D"), 3) <> "Min" Then
MsgBox ("SAI DU LIEU")
Exit For
End If
Next

End Sub
 

File đính kèm

cái này bạn phải dùng lệnh thường trực khi thay đổi dữ liệu thì code nó tự chạy,và công thức kia thì bạn phải dùng điều kiện là ELSEIF nhé chứ tách hàm IF ra là không được.hoặc bạn có thể dùng kết hợp hàm OR nhé
Bài đã được tự động gộp:

mà mình nghĩ là không cần dùng lệnh FOR kia đâu lấy luôn vị trí ở ô đấy là được mà cần gì phải duyệt cả mảng thế kia nó sẽ báo lỗi từ 1 đến 100 thao hồ mà clik nhé
 
Upvote 0
cái này bạn phải dùng lệnh thường trực khi thay đổi dữ liệu thì code nó tự chạy,và công thức kia thì bạn phải dùng điều kiện là ELSEIF nhé chứ tách hàm IF ra là không được.hoặc bạn có thể dùng kết hợp hàm OR nhé
Bài đã được tự động gộp:

mà mình nghĩ là không cần dùng lệnh FOR kia đâu lấy luôn vị trí ở ô đấy là được mà cần gì phải duyệt cả mảng thế kia nó sẽ báo lỗi từ 1 đến 100 thao hồ mà clik nhé
có 2 giá trị "A" và "B", để so sánh 2 giá trị A và B thì câu lệnh nhưu sau : iF A<> B then ....
câu lệnh A khác B là dấu " <> " đúng không bạn ?
 
Upvote 0
chào mọi người
mình có 1 file dữ liệu sau đây, mình muốn kiểm tra dữ liệu đầu vào đúng theo yêu cầu bài toán
cụ thể là nếu 3 kí tự cuối cùng của cột "D" không phải là "MAX" hoặc không phải "MIN" thì msgbox thông báo là lấy dữ liệu vào không chính xác, mình có lập code như sau mà chắc là sai mong mọi người giúp đỡ
For i = 2 To 100
If Right(Cells(i, "D"), 3) <> "MAX" Then
MsgBox ("SAI DU LIEU")
Exit For
End If
If Right(Cells(i, "D"), 3) <> "Min" Then
MsgBox ("SAI DU LIEU")
Exit For
End If
Next

End Sub
Mã:
For i = 2 To 3
If Right(Cells(i, "D"), 3) <> "Max" And Right(Cells(i, "D"), 3) <> "Min" Then
'If Right(Cells(i, "D"), 3) Is Not "MAX" Then
MsgBox ("SAI DU LIEU")
Exit For
End If
Next
[code]
 
Upvote 0
có 2 giá trị "A" và "B", để so sánh 2 giá trị A và B thì câu lệnh nhưu sau : iF A<> B then ....
câu lệnh A khác B là dấu " <> " đúng không bạn ?
đúng rồi bạn à <> trong VBA là khác.
nhưng trong Bài của bạn không dùng được câu lệnh AND đâu vì AND là đồng thời sảy ra nên sẽ luôn báo là sai
 
Upvote 0
???, bạn không thấy khác code trong file của bạn và bạn đã check chưa vậy?
mình check rồi, dữ liệu không chạy
Bài đã được tự động gộp:

đúng rồi bạn à <> trong VBA là khác.
nhưng trong Bài của bạn không dùng được câu lệnh AND đâu vì AND là đồng thời sảy ra nên sẽ luôn báo là sai
tất nhiên là mình không dùng and rồi, cái này phải dùng or, nhưng mình không hiểu sao nó vẫn hiện msgbox mặc dù điều kiện không sai, chắc là nó không hiểu A khác B là dấu " <>
Bài đã được tự động gộp:

???, bạn không thấy khác code trong file của bạn và bạn đã check chưa vậy?
ok. mình sữa lại and thành orlà ok rồi, cảm ơn bạn nhé
 
Lần chỉnh sửa cuối:
Upvote 0
mình check rồi, dữ liệu không chạy
Bài đã được tự động gộp:


tất nhiên là mình không dùng and rồi, cái này phải dùng or, nhưng mình không hiểu sao nó vẫn hiện msgbox mặc dù điều kiện không sai, chắc là nó không hiểu A khác B là dấu " <>
Bài đã được tự động gộp:


ok. mình sữa lại and thành orlà ok rồi, cảm ơn bạn nhé
Lạ nhỉ, dùng or thì lúc nào cũng thông báo. Yêu cần của bạn là dữ liệu đúng thì 3 kí tự cuối phải là min hoặc max, vậy để báo sai thì phải dùng and.
Chịu bạn rồi
 
Upvote 0
Lạ nhỉ, dùng or thì lúc nào cũng thông báo. Yêu cần của bạn là dữ liệu đúng thì 3 kí tự cuối phải là min hoặc max, vậy để báo sai thì phải dùng and.
Chịu bạn rồi
Bạn dùng AND thì nó phải đồng thời sảy ra mà trong trường hợp này thì nó sẽ không bao giờ sảy ra đồng thời cả nên nó chỉ ra đúng 1 điều kiện thôi nhé bạn.
 
Upvote 0
Bạn dùng AND thì nó phải đồng thời sảy ra mà trong trường hợp này thì nó sẽ không bao giờ sảy ra đồng thời cả nên nó chỉ ra đúng 1 điều kiện thôi nhé bạn.
Nếu các bạn dùng Or thì bạn đã chạy code theo đúng ý chưa? mình chắc chắn với dữ liệu trong file thì lúc nào cũng hiện thông báo "Sai dữ liệu", nó không hiện thông báo khi dữ liệu 1 mề (toàn là max hoặc toàn là min)
Vấn đề nữa là trong code của bạn ấy mới có for i = 2 to 3 nên cần xem xét lại toàn cục của dữ liệu có bao nhiêu dòng, nếu theo #1 for i = 2 to 100 xem thế nào, và nên có biến xác định dòng cuối dữ liệu.
 
Upvote 0
Nếu các bạn dùng Or thì bạn đã chạy code theo đúng ý chưa? mình chắc chắn với dữ liệu trong file thì lúc nào cũng hiện thông báo "Sai dữ liệu", nó không hiện thông báo khi dữ liệu 1 mề (toàn là max hoặc toàn là min)
Vấn đề nữa là trong code của bạn ấy mới có for i = 2 to 3 nên cần xem xét lại toàn cục của dữ liệu.
for i=2 to 3 chỉ là ví dụ thôi bạn,cái này có lúc được lúc ko bạn ơi
 
Upvote 0
Nếu các bạn dùng Or thì bạn đã chạy code theo đúng ý chưa? mình chắc chắn với dữ liệu trong file thì lúc nào cũng hiện thông báo "Sai dữ liệu", nó không hiện thông báo khi dữ liệu 1 mề (toàn là max hoặc toàn là min)
Vấn đề nữa là trong code của bạn ấy mới có for i = 2 to 3 nên cần xem xét lại toàn cục của dữ liệu.
đây không phải là dữ liệu của mình nhé,mà đây chỉ là mẫu bạn đấy đưa ra để TEST thôi.
mà đây chỉ kiểm tra 1 phần tử thôi nhé nên không cần thiết là phải toàn là max hoặc toàn là min bạn không hiểu code à.nó duyệt qua mỗi phần tử chứ cần gì đâu phải toàn là max hoặc min.
Bài đã được tự động gộp:

for i=2 to 3 chỉ là ví dụ thôi bạn,cái này có lúc được lúc ko bạn ơi
viết được code chưa bạn không thì mình viết gửi cho luôn
 
Lần chỉnh sửa cuối:
Upvote 0
đây không phải là dữ liệu của mình nhé,mà đây chỉ là mẫu bạn đấy đưa ra để TEST thôi.
mà đây chỉ kiểm tra 1 phần tử thôi nhé nên không cần thiết là phải toàn là max hoặc toàn là min bạn không hiểu code à.nó duyệt qua mỗi phần tử chứ cần gì đâu phải toàn là max hoặc min.
Bài đã được tự động gộp:


viết được code chưa bạn không thì mình viết gửi cho luôn
Ai chả biết kiển tra từng phần tử một bạn, ý mình là tất cả các dòng cùng là mã hoặc cùng là min ấy.
Bạn có thể cho mình hỏi code #4 có đúng không, nếu sai nhờ bạn chỉ chỗ sai.
Bạn tham gia chủ đề này thì bạn thử đưa code của bạn ra coi thế nào.
Bài đã được tự động gộp:

for i=2 to 3 chỉ là ví dụ thôi bạn,cái này có lúc được lúc ko bạn ơi
Cái này là ý như thế nào bạn, ý bạn là dùng or lúc được lúc không? Mình đã nói là dùng Or là sai rồi mà bạn vẫn chưa hiểu logic vấn đề nhỉ.
Mình ví dụ cho bạn hiểu nhé.

Ví dụ dòng bạn kiển tra dữ liệu là Max

Code bạn sẽ kiểm tra là if data <> min or data <> max đúng không? nếu đúng thì phân tích code như sau:
data<> min: ket qua là true
data<> max: false

false or true thì kết quả là true

hay hiểu đơn giản là khi code chạy đến data<> min nó thấy đúng nên nó ko cần xem data <> max làm gì nữa mà chạy luôn lệnh trong khối if đó, tức là mess đó.
 
Lần chỉnh sửa cuối:
Upvote 0
Ai chả biết kiển tra từng phần tử một bạn, ý mình là tất cả các dòng cùng là mã hoặc cùng là min ấy.
Bạn có thể cho mình hỏi code #4 có đúng không, nếu sai nhờ bạn chỉ chỗ sai.
Bạn tham gia chủ đề này thì bạn thử đưa code của bạn ra coi thế nào.
Bài đã được tự động gộp:


Cái này là ý như thế nào bạn, ý bạn là dùng or lúc được lúc không? Mình đã nói là dùng Or là sai rồi mà bạn vẫn chưa hiểu logic vấn đề nhỉ.
Mình ví dụ cho bạn hiểu nhé.

Ví dụ dòng bạn kiển tra dữ liệu là Max

Code bạn sẽ kiểm tra là if data <> min or data <> max đúng không? nếu đúng thì phân tích code như sau:
data<> min: ket qua là true
data<> max: false

false or true thì kết quả là true

hay hiểu đơn giản là khi code chạy đến data<> min nó thấy đúng nên nó ko cần xem data <> max làm gì nữa mà chạy luôn lệnh trong khối if đó, tức là mess đó.
có thể dùng được cả 2 nhé sr bạn khi dùng and cũng được và of cũng được tùy theo điều kiện mình lấy ra nhé
 
Upvote 0
chào mọi người
mình có 1 file dữ liệu sau đây, mình muốn kiểm tra dữ liệu đầu vào đúng theo yêu cầu bài toán
cụ thể là nếu 3 kí tự cuối cùng của cột "D" không phải là "MAX" hoặc không phải "MIN" thì msgbox thông báo là lấy dữ liệu vào không chính xác, mình có lập code như sau mà chắc là sai mong mọi người giúp đỡ
For i = 2 To 100
If Right(Cells(i, "D"), 3) <> "MAX" Then
MsgBox ("SAI DU LIEU")
Exit For
End If
If Right(Cells(i, "D"), 3) <> "Min" Then
MsgBox ("SAI DU LIEU")
Exit For
End If
Next

End Sub
Nếu tôi đoán mò đúng thì bạn phát biểu sai.

Theo bạn thì dữ liệu "hic hic MAX" là đúng hay sai? Nếu là ĐÚNG thì rõ ràng bạn phát biểu sai. Vì sao? Vì dữ liệu này thỏa điều kiện thứ 2: không phải "MIN". Mà bạn dùng hoặc nên kết quả phải là SAI mới đúng ý.

Tôi đoán là: "nếu 3 kí tự cuối cùng của cột "D" không phải là "MAX" VÀ không phải "MIN" thì msgbox thông báo là lấy dữ liệu vào không chính xác". Hoặc phát biểu khác: mọi dữ liệu có đuôi là "MAX" hoặc "MIN" thì đúng, còn lại là sai.
 
Upvote 0
...
Ví dụ dòng bạn kiển tra dữ liệu là Max

Code bạn sẽ kiểm tra là if data <> min or data <> max đúng không? nếu đúng thì phân tích code như sau:
data<> min: ket qua là true
data<> max: false

false or true thì kết quả là true

hay hiểu đơn giản là khi code chạy đến data<> min nó thấy đúng nên nó ko cần xem data <> max làm gì nữa mà chạy luôn lệnh trong khối if đó, tức là mess đó.

Cho đến câu áp cuối thì bạn đúng. Nhưng câu cuối cùng thì không hẳn đúng.
VBA không sử sự "tiết kiệm" như các ngôn ngữ dòng C (C và các ngôn ngữ cùng họ với nó).
Tất cả các biểu thức trong mệnh đề IF đều được xét.
Trong mệnh đề if data <> min or data <> max, cả 2 biểu thức data <> min và data <> max đều được xét. Tuy nhiên, vì hai biểu thức được nói nhau qua toán tử Or cho nên chỉ cần 1 biểu thức True là kết quả của toán tử Or sẽ cho ra True.
Điều này ta phải nắm rõ bởi vì nếu gặp câu sau đây:
IF 2 > 1 Or FunctionGiDo() Then
Bảo rằng 2 > 1 thấy đúng cho nên nó không cần gọi hàm FunctionGiDo là sai.
 
Upvote 0
Cho đến câu áp cuối thì bạn đúng. Nhưng câu cuối cùng thì không hẳn đúng.
VBA không sử sự "tiết kiệm" như các ngôn ngữ dòng C (C và các ngôn ngữ cùng họ với nó).
Tất cả các biểu thức trong mệnh đề IF đều được xét.
Trong mệnh đề if data <> min or data <> max, cả 2 biểu thức data <> min và data <> max đều được xét. Tuy nhiên, vì hai biểu thức được nói nhau qua toán tử Or cho nên chỉ cần 1 biểu thức True là kết quả của toán tử Or sẽ cho ra True.
Điều này ta phải nắm rõ bởi vì nếu gặp câu sau đây:
IF 2 > 1 Or FunctionGiDo() Then
Bảo rằng 2 > 1 thấy đúng cho nên nó không cần gọi hàm FunctionGiDo là sai.
cái này phải sửa như thế nào chu đúng vậy a?
 
Upvote 0
Web KT

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

Back
Top Bottom