Xin hướng dẫn công thức if kết hợp OR (1 người xem)

Liên hệ QC

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

phamvandunghp84

Thành viên thường trực
Tham gia
5/3/20
Bài viết
241
Được thích
12
Mình muốn hỏi cách viết công thức trong tình huống sau:
Nếu A1=B1 hoặc A1=A2 thì trả về đáp "đúng" ngược lại thì là "sai"
mình viết như này nhưng không đúng. Mong các bạn sửa giúp. Xin cảm ơn !!

=IF((A1=B1)*OR(A1=A2);"đúng";"sai")
 
=if((a1=b1)+(a1=a2),True,False)

--------
Chiện gì vậy chời?
Nào là giới hạn số từ, giới hạn số ký tự, giờ thêm cái này.

1601003538692.png
 
=if((a1=b1)+(a1=a2),True,False)...
Bạn có biết Logic shortcut không?
Khi làm việc với IF, những công thức trông gọn ghẽ có khi lại kém hiệu quả.

Theo luật shortcut:
Với OR, nếu logic a1=b1 thoả thì sẽ không xét tiếp a1=a2 (đỡ được 1 con toán)
Với con toán cộng, lô gic bắt buộc phải tính cả hai vế, sau đó lại phải ép kiểu nó thành số.

Tôi nhớ có đọc một tài liệu nói rằng tuy luật này không áp dụng cho VBA nhưng có áp dụng cho các hàm bảng tính.
Nếu bạn làm việc nhiều với Google Sheets thì cũng nên biết rằng JavaScript theo luật này, và khả năng Sheets theo luật rất cao.

Muốn thử cũng không khó. Bạn chỉ cần viết một vài hàm UDF đơn giản MsgBox lên báo cho biết hàm có được gọi hay không. Lên bảng tính tha hồ thử các trường họp lô gic IF AND OR.
 
Bạn có biết Logic shortcut không?
Khi làm việc với IF, những công thức trông gọn ghẽ có khi lại kém hiệu quả.

Theo luật shortcut:
Với OR, nếu logic a1=b1 thoả thì sẽ không xét tiếp a1=a2 (đỡ được 1 con toán)
Với con toán cộng, lô gic bắt buộc phải tính cả hai vế, sau đó lại phải ép kiểu nó thành số.

Tôi nhớ có đọc một tài liệu nói rằng tuy luật này không áp dụng cho VBA nhưng có áp dụng cho các hàm bảng tính.
Nếu bạn làm việc nhiều với Google Sheets thì cũng nên biết rằng JavaScript theo luật này, và khả năng Sheets theo luật rất cao.

Muốn thử cũng không khó. Bạn chỉ cần viết một vài hàm UDF đơn giản MsgBox lên báo cho biết hàm có được gọi hay không. Lên bảng tính tha hồ thử các trường họp lô gic IF AND OR.
Bạn ơi mình thấy viết theo phép + thì kết quả đúng ý mình mong muốn. nhưng chạy hơi chậm. vậy có cách nào khác nhanh hơn sao bạn?
Tiện đây mình hỏi chút. mình so sánh hai chuỗi mà nhìn giống nhau nhưng lại sai.
bạn xem giúp mình chút
 

File đính kèm

=IF((A1=B1)*OR(A1=A2);"đúng";"sai")
=if((a1=b1)+(a1=a2),True,False)
Mình mới thấy 2 kiểu viết như này luôn á.
Nếu là mình thì mình viết theo kiểu bình thường mà mình biết thôi:
Mã:
=IF(OR(A1=B1;A1=A2);"đúng";"sai")
@phamvandunghp84 : bạn nhập kiểu của mình xem coi kết quả có ra đúng hôn?
 
Bạn ơi mình thấy viết theo phép + thì kết quả đúng ý mình mong muốn. nhưng chạy hơi chậm. vậy có cách nào khác nhanh hơn sao bạn?
...
"chạy hơi chậm" là do bảng tính của bạn mẫu mã tô đậm tô nhạt, tô màu tô miếc, merge cells tùm lum.
Chứ công thức thì chỉ khác nhau vài phần tỷ giây.

Cái vụ "lô gic shorrtcut" tôi nói ở trên là giữa dân thiết kế bảng tính với nhau.

1601006611421.png
Mình mới thấy 2 kiểu viết như này luôn á. ...
Bạn có biết cái kiểu 1 ở trên nó tính ra cái gì hôn?
Kiểu 2 là do người viết phỏng theo yêu cầu của thớt.
 
Mình mới thấy 2 kiểu viết như này luôn á.
Nếu là mình thì mình viết theo kiểu bình thường mà mình biết thôi:
Mã:
=IF(OR(A1=B1;A1=A2);"đúng";"sai")
@phamvandunghp84 : bạn nhập kiểu của mình xem coi kết quả có ra đúng hôn?
Cảm ơn, thật tình mình tự học mò nên k hiểu sâu lắm.
cho mình hỏi thêm chút mình so sánh hai chuỗi mà hình như gặp ký tự lạ nên kết quả so sánh cứ báo sai. bạn xem giúp mình cần phải làm như nào để loại bỏ ký tự ẩn nào ?
TRUE
TRUE​
 
"chạy hơi chậm" là do bảng tính của bạn mẫu mã tô đậm tô nhạt, tô màu tô miếc, merge cells tùm lum.
Chứ công thức thì chỉ khác nhau vài phần tỷ giây.
Không có gì anh ơi. File ở bài #5 chưa tới 10KB mà anh.

Chắc họ có siêu thiết bị đo đếm thời gian.
 
Dạ không. Con mới thấy lần đầu.
Con thử thì không hiểu luôn: công thức công nhập ở ô G3
View attachment 246155

Bạn ơi không biết lỗi do đâu mà của mình lại cứ bị lỗi như này. Phải nhấn vào ô A2 rồi nhấn Entrer thì nói mới so sánh ra là "đúng" mình thử tìm ký tự nào không hiển thị mà không biết cách tìm mã code của ký tự ẩn
1601007371132.png
 
Bạn ơi không biết lỗi do đâu mà của mình lại cứ bị lỗi như này. Phải nhấn vào ô A2 rồi nhấn Entrer thì nói mới so sánh ra là "đúng" mình thử tìm ký tự nào không hiển thị mà không biết cách tìm mã code của ký tự ẩn
View attachment 246157
Ý, mình làm như bạn nói nó cũng ra đúng. Lạ thiệt luôn. Mình mò cách kiểm tra ký tự lạ nãy giờ mà chưa ra, thấy toàn đúng code không hà, lạ thiệt.
1601007958784.png
 
Có gì đâu mà lạ.
Với bảng tính thì đừng có định dạng tùm lum, kỹ sư lập trình đã tính toán kỹ rồi. Chuỗi mặc định chạy về bên trái, còn số chạy về phải, logic (TRUE, FALSE) ở giữa.
Để khi nhìn vào biết ngay số là số, chữ là chữ. Nếu tùm lum thì số mà không phải số.

File ở bài #5, logic không phải là logic mà là chuỗi (A2) nên kết quả công thức là chuẩn chỉ 1000/1000 rồi. Không có gì lạ và sai cả.

Giờ chọn A2, nhấn F2, rồi Enter xem ra cái gì.

@Chủ thớt: A3 là logical, không phải chuỗi, mà đòi tìm ký lạ với quen.

1601008763684.png
 
Có gì đâu mà lạ.
Với bảng tính thì đừng có định dạng tùm lum, kỹ sư lập trình đã tính toán kỹ rồi. Chuỗi mặc định chạy về bên trái, còn số chạy về phải, logic (TRUE, FALSE) ở giữa.
Để khi nhìn vào biết ngay số là số, chữ là chữ. Nếu tùm lum thì số mà không phải số.

File ở bài #5, logic không phải là logic mà là chuỗi (A2) nên kết quả công thức là chuẩn chỉ 1000/1000 rồi. Không có gì lạ và sai cả.

Giờ chọn A2, nhấn F2, rồi Enter xem ra cái gì.

@Chủ thớt: A3 là logical, không phải chuỗi, mà đòi tìm ký lạ với quen.

View attachment 246159
Mình chưa hiểu ý bạn ( do mình không hiểu sâu ). Vậy trong trường hợp này mình phải làm sao để kết quả so sánh trả về là đúng?
 
Dạ không. Con mới thấy lần đầu.
Con thử thì không hiểu luôn: công thức công nhập ở ô G3
...
Tính biểu thức =IF((A1=B1)*OR(A1=A2);"đúng";"sai")
OR(A1=A2) ---> bên trong OR chỉ có 1 tham số (biểu thức A1=A2). Tức là coi như OR chỉ là đồ trưng bày, kết quả của OR(A1=A2) in hệt như kết quả của (A1=A2)
Như vậy, ta còn lại (A1=B1)*(A1=A2)
Rất tiếc, theo luật lô gic thì phép * tương đương với AND và phép + tương đương với OR
A + B : chỉ cần A hoặc B = 1 thì biểu thức trả về True (>0) ---> OR
A * B : chỉ cần A hoặc B = 0 thì biểu thức trả về False (=0) ---> AND

Tức là theo công thức của thớt ở bài #1 thì đó là hàm AND. Bài #2 chỉnh nó lại thành hàm OR.

Chú: nếu ở cấp Đại học bạn có học môn Toán Lô gic (Boolean Algebra) thì đã biết qua luật (*=And; +=Or) này rồi.
 
Lần chỉnh sửa cuối:
Cái này Toán đại số ở bậc phổ thông học rồi anh ơi.

Em nhớ không nhầm là phần (hệ) phương trình, bất phương trình.
Tôi học ở năm thứ nhất, ĐHBK tpHCM (Lúc tôi học, nó tên là Kỹ Sư Phú Thọ)
Theo như kiến thức các bạn ở đây thì tôi không tin họ đã học qua lý thuyết không gian vectơ gồm một tập hợp hai phần tử T/F, và các toán tử nội And, Or, Not, Xor,...
Chả nhẽ cái con số "học một hai tiết đầu rồi cuối khoá đi thi" nhiều đến thế?
 
Tôi học ở năm thứ nhất, ĐHBK tpHCM (Lúc tôi học, nó tên là Kỹ Sư Phú Thọ)
Theo như kiến thức các bạn ở đây thì tôi không tin họ đã học qua lý thuyết không gian vectơ gồm một tập hợp hai phần tử T/F, và các toán tử nội And, Or, Not, Xor,...
Chả nhẽ cái con số "học một hai tiết đầu rồi cuối khoá đi thi" nhiều đến thế?
Lớp 10 học tập hợp và logic song song, cứ nhầm "giao" "hợp" với "tuyển" "hợp"
Năm đầu đại học, học toán tử, phải chứng minh 1+1=2, các toán tử And, Or, Not, Xor,... không được học
 
Lớp 10 học tập hợp và logic song song, cứ nhầm "giao" "hợp" với "tuyển" "hợp"
Năm đầu đại học, học toán tử, phải chứng minh 1+1=2, các toán tử And, Or, Not, Xor,... không được học
Có thể do đưa Đại số vào lớp 10 là sớm quá cho nên bà con học cứ lơ mơ.
Tôi nhớ hồi Trung học, các định nghĩa toán tử trong tập hợp số thực với các tính chất như đối xứng (a + b = b + a), phần tử trống (1 và nhân, 0 và cộng, trong tập hợp số thực a*1 = 1*a = a), tính chất truyền ( (a + b) + c = a + (b + c) = a + b +c ), tính chất phân bổ ( a*(b+c) = a*b + a*c ) mình chỉ học thuộc để mà làm toán chứ chả hiểu gì cả.
Về sau học lại Đại số ở bậc Đại học mới hiểu ra. Thực sự lúc đó mà vẫn không hiểu thì làm mấy con toán AND, OR, XOR khùng luôn.

Cái vụ "giao", "hợp" cũng vậy. Chỉ hiểu lan man. Đến khi gặp CSDL LH mới học kỹ lại.
 
Lớp 10 học tập hợp và logic song song, cứ nhầm "giao" "hợp" với "tuyển" "hợp"
Phép "Giao" (còn gọi là "Tuyển") là phần chung giống nhau
Phép "Hợp" (còn gọi là "Hội") là phần chung và phần riêng luôn.
Ví dụ: dòng "Giao" cột tạo ra ô; dòng "Hợp" cột tạo ra vùng có hình chữ thập
Trong thực tế cuộc sống, nếu nối chuỗi hai phép này lại sẽ tạo ra tập hợp children, vừa có đặc điểm chung của parent, vừa có đặc tính riêng của cá thể đó.
 
Chú: nếu ở cấp Đại học bạn có học môn Toán Lô gic (Boolean Algebra) thì đã biết qua luật (*=And; +=Or) này rồi.
Theo như kiến thức các bạn ở đây thì tôi không tin họ đã học qua lý thuyết không gian vectơ gồm một tập hợp hai phần tử T/F, và các toán tử nội And, Or, Not, Xor,...
Chả nhẽ cái con số "học một hai tiết đầu rồi cuối khoá đi thi" nhiều đến thế?
Cái này Toán đại số ở bậc phổ thông học rồi anh ơi.
Em nhớ không nhầm là phần (hệ) phương trình, bất phương trình.
Lớp 10 học tập hợp và logic song song, cứ nhầm "giao" "hợp" với "tuyển" "hợp"
Năm đầu đại học, học toán tử, phải chứng minh 1+1=2, các toán tử And, Or, Not, Xor,... không được học
Các bác các anh nói đều đúng hết. Con/Em không dám đổ lỗi cho Giáo dục. Chỉ trách bản thân học hành không đàng hoàng thôi.
Nói ra thực quá xấu hổ. Tôi đã biết đến Excel hồi học nghề năm lớp 8 (năm 1998). Rồi năm lớp 10, năm 2000 tôi may mắn được học lớp chuyên Tin ở trường Chuyên điểm của tỉnh; mà chỉ có lớp tôi mới được học môn Lập trình Pascal, các lớp chuyên khác chỉ học Tin học văn phòng và Pascal sơ sài còn hơn lớp tôi. Đến lúc những năm đại học (tôi học chuyên ngành Quản trị nhân lực) thì tôi chỉ tiếp cận đến những môn liên quan đến TOÁN là Toán cao cấp, Xác suất thống kê. Đó là những gì tôi được dạy, còn kết quả học của tôi cụ thể như thế nào thì chắc xin không dám bàn đến. Tôi cũng có cái bằng Đại học như bao người.

Năm nay đã là 2020 rồi, về toán tin, trình độ của tôi vẫn y chang trình độ của tôi thôi. Thật là ngại quá!
Tôi đang là 1 nhân viên tổ chức hành chính. :)
 
Từ 1985 đến 1995 thì Pascal là chúa tể, vì hai lý do chính:
1. Pascal là ngôn ngữ được đặt ra để dạy Angol 60. Và vì vậy được chọn làm ngôn ngữ dạy lập trình. Cũng do lô gic khá vững chắc của luật ngữ pháp cho nên khonagr thời gian đó người ta cũng dùng pseudo-pascal (tựa Pascal) để làm ngôn ngữ diễn giải chương trình.
2. Pascal chiếm ngôi vị "được sử dụng nhiều nhất" là do Borland quyết định cho không phiên bản Turbo Pascal

Sau 1995 thì Pascal không còn làm chúa tể nữa bởi vì:
1. Pascal là ngôn ngữ lập trình cấu trúc. Trong khi phát-sần dạo đó đi về hướng lập trình hướng đối tượng. Những cố gắng để dưa nó qua HĐT chỉ thành công một phần (Delphi là một ví dụ điển hình)
2. Về lập trình cấu trúc thì nó bị C cạnh tranh dữ dội. Khi Borland quyết định cho không Turbo C thì Pascal đành nhường chỗ cho C.

Bước đầu học lập trình của tôi là Fortran IV (may không phải Fortran 2). Viết code trên giấy, và chuyển qua máy bằng card bấm lỗ. Khi làm việc trên terminal (có nghĩa là cái có thể gõ được và nhìn được) thì là BASIC. Về sau này mới tập toẹ COBOL, Pascal, rồi C, C++, Java, C#, .... riết rồi cũng chả nhớ mình đã học và làm những phiên bản nào.
 
Lớp 10 tôi có học logic, and or not không có xor. Bài tập là những bảng chân trị của những két hợp đó, và tìm ra quy luật chẳng hạn như not A and not B = not (A or B)
 

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

Back
Top Bottom