Thắc mắc về toán tử so sánh trong Excel

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

tiemphi

Thành viên mới
Tham gia
1/2/15
Bài viết
35
Được thích
5
Xin chào mọi người, mình là thành viên mới. Mình đã đăng bài này ở khu đăng bài chung nhưng ko nhận được giải đáp nên đăng bài qua đây, mong mọi người giúp đỡ :).
Mình có 3 thắc mắc về các toán tử so sánh (thường sử dụng trong các hàm logic):
1. Khi dùng các toán tử so sánh, thì 2 vế của toán tử so sánh gồm kiểu dữ liệu gì (chuỗi, số, ngày tháng,...)? Có nhất thiết phải giống nhau không?
2. Trong file ví dụ, mình lần lượt so sánh 1 giá trị (thuộc 1 kiểu dữ liệu) vs các giá trị khác (cùng hoặc khác kiểu dữ liệu). Tại sao kết quả lại ra như vậy? Excel căn cứ vào đâu để so sánh. Mình nghĩ là có liên quan đến Bảng mã ASCII nhưng vẫn còn vài chỗ thắc mắc. Như là ngày tháng thì căn cứ vào đâu? Tại sao ko phân biệt chữ hoa và chữ thường khi so sánh?
3. Trong file ví dụ, mình dùng hàm SUMIF để tính tổng số lượng các mặt hàng nhập (có Mã Số bắt đầu bằng kí tự N). Nên khi viết hàm mình đã chọn điều kiện là “N*” = bắt đầu bằng kí tự N. Hàm thì ra đúng, nhưng sao khi mình thử so sánh (toán tử =) Mã Số vs “N*” thì kết quả toàn ra FALSE. Vậy thì trong hàm SUMIF, Excel so sánh như thế nào mà ra TRUE.
Hiện giờ mình đang rất đau đầu vs mấy câu hỏi này. Mong sớm nhận được sự trợ giúp của mọi người. Xin cám ơn mọi người. :)
 

File đính kèm

Xin chào mọi người, mình là thành viên mới. Mình đã đăng bài này ở khu đăng bài chung nhưng ko nhận được giải đáp nên đăng bài qua đây, mong mọi người giúp đỡ :).
Mình có 3 thắc mắc về các toán tử so sánh (thường sử dụng trong các hàm logic):
1. Khi dùng các toán tử so sánh, thì 2 vế của toán tử so sánh gồm kiểu dữ liệu gì (chuỗi, số, ngày tháng,...)? Có nhất thiết phải giống nhau không?
2. Trong file ví dụ, mình lần lượt so sánh 1 giá trị (thuộc 1 kiểu dữ liệu) vs các giá trị khác (cùng hoặc khác kiểu dữ liệu). Tại sao kết quả lại ra như vậy? Excel căn cứ vào đâu để so sánh. Mình nghĩ là có liên quan đến Bảng mã ASCII nhưng vẫn còn vài chỗ thắc mắc. Như là ngày tháng thì căn cứ vào đâu? Tại sao ko phân biệt chữ hoa và chữ thường khi so sánh?
3. Trong file ví dụ, mình dùng hàm SUMIF để tính tổng số lượng các mặt hàng nhập (có Mã Số bắt đầu bằng kí tự N). Nên khi viết hàm mình đã chọn điều kiện là “N*” = bắt đầu bằng kí tự N. Hàm thì ra đúng, nhưng sao khi mình thử so sánh (toán tử =) Mã Số vs “N*” thì kết quả toàn ra FALSE. Vậy thì trong hàm SUMIF, Excel so sánh như thế nào mà ra TRUE.
Hiện giờ mình đang rất đau đầu vs mấy câu hỏi này. Mong sớm nhận được sự trợ giúp của mọi người. Xin cám ơn mọi người. :)
1.2. Khi so sánh, excel tự chuyển đổi kiểu cho 2 vế giống nhau. Dữ liệu kiểu date time sẽ chuyển thành kiểu số là thời gian tính = ngày từ 1/1/1900 đến thời điểm đó. Nếu 2 vế đều chuyển được về kiểu số thì excel sẽ so sánh 2 số, nếu không được thì so sánh kiểu text. Excel không phân biệt chữ hoa thường khi so sánh text, so sánh theo mã ASCII từ trái sang phải lần lượt từng ký tự.
3. "N1", "N2", ... không bằng "N*". N* đại diện cho tất cả các chuỗi bắt đầu ="N". Trong VBA có toán tử LIKE để so sánh chuỗi có sử dụng wild card: "N*" LIKE "N1" = TRUE, trong công thức excel không có toán tử này. Cả VBA và công thức khi so sánh "N*" = "N1" đều ra FALSE.
 
1.2. Khi so sánh, excel tự chuyển đổi kiểu cho 2 vế giống nhau. Dữ liệu kiểu date time sẽ chuyển thành kiểu số là thời gian tính = ngày từ 1/1/1900 đến thời điểm đó. Nếu 2 vế đều chuyển được về kiểu số thì excel sẽ so sánh 2 số, nếu không được thì so sánh kiểu text. Excel không phân biệt chữ hoa thường khi so sánh text, so sánh theo mã ASCII từ trái sang phải lần lượt từng ký tự.
3. "N1", "N2", ... không bằng "N*". N* đại diện cho tất cả các chuỗi bắt đầu ="N". Trong VBA có toán tử LIKE để so sánh chuỗi có sử dụng wild card: "N*" LIKE "N1" = TRUE, trong công thức excel không có toán tử này. Cả VBA và công thức khi so sánh "N*" = "N1" đều ra FALSE.
Cảm ơn bạn rất nhiều, vậy là mình hiểu cái ngày tháng và mã ASCII rồi. Còn về câu 3, ý bạn là trong hàm SUMIF, excel không phải dùng toán tử = để so sánh, mà là dùng toán tử LIKE đúng ko? Lần đầu mình nghe tên toán tử này :(. Tuy chưa hiểu rõ LIKE khác gì =, nhưng dù sao cũng cảm ơn bạn rất nhiều :)
 
Lần chỉnh sửa cuối:
Cảm ơn bạn rất nhiều, vậy là mình hiểu cái ngày tháng và mã ASCII rồi. Còn về câu 3, ý bạn là trong hàm SUMIF, excel không phải dùng toán tử = để so sánh, mà là dùng toán tử LIKE đúng ko? Lần đầu mình nghe tên toán tử này :(. Tuy chưa hiểu rõ LIKE khác gì =, nhưng dù sao cũng cảm ơn bạn rất nhiều :)
LiKE dùng trong VBA bạn ơi!!! công thức của bạn sai =SUMIF(Mã_số,"N*",Số_lượng) bạn viết thế này công thức sẽ so sánh điều kiện với mảng mả Mã_số. tức là sumif sẽ dò tất cả những ô đáp ứng đúng điều kiện là N* mà trong Mã_số của bạn không có N* nào! bạn thử thay "N*" = "N02" xem kết quả có phải là tổng số lượng của mã N02 không?
 
như bạn so sánh N01 = N* là sai rồi excel sẽ so sánh theo kiểu tex tức là n = n và 01 khác * vậy nên khi dùng if hay sumif countif rất nguy hiểm đôi khi điều kiện của bạn có 1 dấu cách mà không biết là sẽ ra kết quả sai ngay.
:=\+
 
Cảm ơn bạn rất nhiều, vậy là mình hiểu cái ngày tháng và mã ASCII rồi. Còn về câu 3, ý bạn là trong hàm SUMIF, excel không phải dùng toán tử = để so sánh, mà là dùng toán tử LIKE đúng ko? Lần đầu mình nghe tên toán tử này :(. Tuy chưa hiểu rõ LIKE khác gì =, nhưng dù sao cũng cảm ơn bạn rất nhiều :)
LIKE khác =. Về logic nếu A=B thì trong các biểu thức có A đều có thể thay bằng B mà kết quả không đổi, trong khi công thức =SUMIF(Mã_số,"N*",Số_lượng) sẽ lọc tất cả các mã số bắt đầu bởi N khác công thức =SUMIF(Mã_số,"N01",Số_lượng) chỉ lấy các mã số N01; do vậy N*<>N01. Hàm SUMIF và 1 số hàm khác như SEARCH chấp nhận các ký tự đại diện (wild card) nếu so sánh kiểu text (tương tự toán tử LIKE).
 
Lần chỉnh sửa cuối:
LiKE dùng trong VBA bạn ơi!!! công thức của bạn sai =SUMIF(Mã_số,"N*",Số_lượng) bạn viết thế này công thức sẽ so sánh điều kiện với mảng mả Mã_số. tức là sumif sẽ dò tất cả những ô đáp ứng đúng điều kiện là N* mà trong Mã_số của bạn không có N* nào! bạn thử thay "N*" = "N02" xem kết quả có phải là tổng số lượng của mã N02 không?
Chào bạn, trong ví dụ của mình mình dùng đk "N*", excel vẫn hiểu và tính ra tổng số lượng các mặt hàng có mã số bắt đầu bằng kí tự N (* thay thế cho nhiều kí tự bất kì), mình đang thắc mắc SUMIF đã so sánh như thế nào (tức là so sánh bằng toán tử gì)? :)
 
như bạn so sánh N01 = N* là sai rồi excel sẽ so sánh theo kiểu tex tức là n = n và 01 khác * vậy nên khi dùng if hay sumif countif rất nguy hiểm đôi khi điều kiện của bạn có 1 dấu cách mà không biết là sẽ ra kết quả sai ngay.
:=\+
Cảm ơn bạn đã góp ý, đúng là lâu nay mình dùng các hàm sumif, countif cũng không chú ý trường hợp có "khoảng trống". Tuy nhiên để giải quyết vấn đề đó thì có thể dùng thêm hàm TRIM là được :)
 
LIKE khác =. Về logic nếu A=B thì trong các biểu thức có A đều có thể thay bằng B mà kết quả không đổi, trong khi công thức =SUMIF(Mã_số,"N*",Số_lượng) sẽ lọc tất cả các mã số bắt đầu bởi N khác công thức =SUMIF(Mã_số,"N01",Số_lượng) chỉ lấy các mã số N01; do vậy N*<>N01. Hàm SUMIF và 1 số hàm khác như SEARCH chấp nhận các ký tự đại diện (wild card) nếu so sánh kiểu text (tương tự toán tử LIKE).
Cảm ơn bạn rất nhiều, nhờ những giải thích của bạn mà mình đã biết thêm về toán tử LIKE, về các hàm có chấp nhận ký tự đại diện :)
 
mọi người cho e hỏi ví dụ e có một ô chứa gia trị là 5 thi viet code làm sao để khi e kich hoat code thì nó se lên 10 ròi kich hoat tiep thì lên 15 tip tip ai biết giup e với
 
mọi người cho e hỏi ví dụ e có một ô chứa gia trị là 5 thi viet code làm sao để khi e kich hoat code thì nó se lên 10 ròi kich hoat tiep thì lên 15 tip tip ai biết giup e với
Tự mở thớt mới mà hỏi. Hoặc vào cái chỗ "hỏi về VBA".
Đang khong chen ngang thớt của đề tài khác là bất lịch sự
 
Web KT

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

Back
Top Bottom