Giải thích cách dùng Min, Max thay thế cho hàm If

Liên hệ QC

ptm0412

Bad Excel Member
Thành viên BQT
Administrator
Tham gia
4/11/07
Bài viết
14,500
Được thích
37,173
Donate (Momo)
Donate
Giới tính
Nam
Nghề nghiệp
Consultant
Đề bài là:

5. Tổng điểm=0, nếu diểm 3 môn =0, ngược lại tổng điểm = điểm khu vực + Điểm 3 môn
Nhưng nếu nghành Xây dựng >30 thì chỉ lấy 30
Các nghành còn lại nếu Tổng điểm>40 thì lấy 40

Phải cộng J4 và I4 rồi mới so sánh với 30 hoặc 40:

=IF(J4=0,0,IF(AND(G4="Xây dựng",J4+I4>30),30,IF(J4+I4>40,40,J4+I4)))

Rút gọn:

=IF(J4=0,0,MIN(IF(G4="Xây dựng",30,40),J4+I4))

 
Lần chỉnh sửa cuối:
Xin chào các anh chị em, xin được làm quen và hỏi 1 chuyện:

Câu 4 của bạn linhngọc đúng hướng rồi, nhưng chỉ thiếu cộng I4 thôi. Còn mình thì làm như vầy:

=IF(J4=0;0;IF(G4="Xây dựng";IF(J4+I4>30;30;J4+I4);IF(J4+I4>40;40;J4+I4)))

thấy cũng ra kết quả tương đương 2 công thức của Bác ptm0412.

Câu hỏi của mình là: Suy luận thế nào mà công thức số 2 của Bác ptm0412 dùng Min thay cho 1 If của công thức số 1 và thay cho 2 If của mình?

Trong 1 bài khác (http://www.giaiphapexcel.com/forum/...m-VLOOKUP-kết-hợp-hàm-IF.&p=276649#post276649), mình thấy Bác ptm0412 dùng vừa min vừa max để chỉ lấy giá trị trong khoảng 70, 124:

nằm trong giá trị 70<x<124 thi sẽ lấy x, còn <70 thì lấy =70, >124 thì lấy =124

=Min(Max(A1;70);124)

hoặc:

=MAX(MIN(A1;124);70)

Cũng câu hỏi trên, công thức của Bác ptm0412 suy luận thế nào, mà theo mình thì phải 2 If mới ra:

=IF(A1>124,124,IF(A1<70,70,A1))
 
Xin chào các anh chị em, xin được làm quen và hỏi 1 chuyện:

Câu 4 của bạn linhngọc đúng hướng rồi, nhưng chỉ thiếu cộng I4 thôi. Còn mình thì làm như vầy:

=IF(J4=0;0;IF(G4="Xây dựng";IF(J4+I4>30;30;J4+I4);IF(J4+I4>40;40;J4+I4)))

thấy cũng ra kết quả tương đương 2 công thức của Bác ptm0412.

Câu hỏi của mình là: Suy luận thế nào mà công thức số 2 của Bác ptm0412 dùng Min thay cho 1 If của công thức số 1 và thay cho 2 If của mình?

Trong 1 bài khác (http://www.giaiphapexcel.com/forum/showthread.php?34911-S%E1%BB%AD-d%E1%BB%A5ng-h%C3%A0m-VLOOKUP-k%E1%BA%BFt-h%E1%BB%A3p-h%C3%A0m-IF.&p=276649#post276649), mình thấy Bác ptm0412 dùng vừa min vừa max để chỉ lấy giá trị trong khoảng 70, 124:



=Min(Max(A1;70);124)

hoặc:

=MAX(MIN(A1;124);70)

Cũng câu hỏi trên, công thức của Bác ptm0412 suy luận thế nào, mà theo mình thì phải 2 If mới ra:

=IF(A1>124,124,IF(A1<70,70,A1))
IF(A1>124,124tương đương với MIN(A1,124)=>> cho kết quả bé hơn hoặc =124 tức là khi a1 >= 124 thì trả về 124 còn lại a1
IF(A1<70,70,A1)tương đương với Max(A1,70)=>> cho kết quả lớn hơn hoặc =70 tức là khi a1 <=70 thì trả về 70 còn lại a1
bây giờ thid so sánh 2 vế trên tức là so sánh lấy giá trị từ 70-------124 thôi tương đương=Min(Max(A1;70);124)
 
Lần chỉnh sửa cuối:
IF(A1>124,124tương đương với MIN(A1,124)=>> cho kết quả bé hơn hoặc =124 tức là khi a1 >= 124 thì trả về 124 còn lại a1
IF(A1<70,70,A1)tương đương với Max(A1,70)=>> cho kết quả lớn hơn hoặc =70 tức là khi a1 <=70 thì trả về 70 còn lại a1
bây giờ thid so sánh 2 vế trên tức là so sánh lấy giá trị từ 70-------124 thôi tương đương=Min(Max(A1;70);124)

Cám ơn Bạn Duy Thương nhiều nhen, nhưng mình vẫn không hỉu cái suy luận logic. Bạn mới chỉ nói sự tương đương giữa 2 công thức cụ thể, mà chưa nói đến gốc rễ suy luận. Do đó mình nhìn công thức này

=IF(J4=0,0,MIN(IF(G4="Xây dựng",30,40),J4+I4))
và công thức này
=IF(J4=0,0,IF(AND(G4="Xây dựng",J4+I4>30),30,IF(J4+I4>40,40,J4+I4)))

Vẫn không thấy sự tương quan?

Kể cả đọc cách giải thích của bạn xong mình cũng còn mù mờ lắm. Như bạn nói:
bây giờ thid so sánh 2 vế trên tức là so sánh lấy giá trị từ 70-------124 thôi
mình không hiểu, lẽ ra thì là gộp hai vế lại chứ? so sánh thì so sánh cái gì và cái gì, so sánh trên phương diện nào? ...

Phiền bạn giải thích cặn kẽ hơn dùm, xin cám ơn rất nhiều!
 
Lần chỉnh sửa cuối:
Phiền bạn giải thích cặn kẽ hơn dùm, xin cám ơn rất nhiều!
"Gốc rễ suy luận" đây:

1. Trường hợp đơn giản: so sánh 2 số, Lấy số nhỏ hơn
- Suy luận thông thường (bằng câu văn):
So sánh 2 số A và B, nếu A nhỏ hơn B thì lấy A, ngược lại thì lấy B
Hoặc: Nếu A lớn hơn B thì lấy B, ngược lại lấy A
- Áp vô hàm If: If(A<B, A, B)
- áp vô hàm Min: Min(A, B)

Vậy, suy luận trong hàm Min cũng là: nếu A<B thì lấy A, ngược lại thì lấy B, đúng không?

Max (lấy số lớn hơn) cũng vậy nhé!

Trở lại công thức 1 bài #11:

=IF(J4=0,0,IF(AND(G4="Xây dựng",J4+I4>30),30,IF(J4+I4>40,40,J4+I4)))

và công thức của nàng Monalisa:

=IF(J4=0;0;IF(G4="Xây dựng";IF(J4+I4>30;30;J4+I4);IF(J4+I4>40;40;J4+I4 )))

Có phải cái màu đỏ tương ứng Min(J4+I4, 30) không?
Có phải cái màu xanh tương ứng Min(J4+I4, 40) không?

Thay vô nhé:

=IF(J4=0;0;IF(G4="Xây dựng";Min(J4+I4, 30); Min(J4+I4, 40)))

Tới quá trình rút gọn: Cũng là "gốc rễ suy luận" đây:

Ta đang so sánh số A là J14+I14 và số B để lấy số nhỏ hơn. Số B lại phụ thuộc điều kiện G4: Nếu G4 bằng "Xây dựng" thì B = 30, nếu không thì là 40. Cái màu xanh là 1 cái If: If(G4="Xây dựng", 30, 40)

Vậy ta cứ so sánh A và B thôi: Min(A, B)!

=IF(J4=0,0,MIN(A, B))
=IF(J4=0,0,MIN(J4+I4, If(G4="Xây dựng", 30, 40)))

Đó chẳng phải là công thức 2 bài #11 sao?

Giải thích vậy được chưa hả nàng MonaLisa?
 
Lần chỉnh sửa cuối:
2. Trường hợp so sánh 1 số với 1 khoảng (có số đầu khoảng và số cuối khoảng).

Đó là trường hợp x nằm trong giá trị 70<x<124 thi sẽ lấy x, còn <70 thì lấy =70, >124 thì lấy =124

a. Ta so x với 70 trước:

Nếu x nhỏ hơn 70, thì lấy 70, ngược lại thì lấy x, tức là lấy số lớn hơn.

Gán vô If: If(x<70, 70, x)
Gán vô Max: Max(x, 70)

(Suy luận như phần 1)

Sau khi gán vô If hoặc Max, ta có 1 số mới, tạm gọi là X1, qua phần tiếp theo:

b. So sánh số X1 với 124.

Nếu X1 lớn hơn 124 thì lấy 124, ngược lại thì lấy X1, tức là lấy số nhỏ hơn.

Gán vô If: If(X1>124, 124, X1)
Gán vô Min: Min(X1, 124)

- Thay vô If: Thay X1 bằng cái màu đỏ, 124 màu xanh giữ nguyên:


If(
If(x<70, 70, x)>124, 124, If(x<70, 70, x))

Không ai làm vậy, mà làm vầy: (dùng phép loại trừ)

If(x<70, 70, If(A1>124,124, x))

- Thay vô Min: Thay X1 bằng cái màu đỏ, 124 màu xanh giữ nguyên:

Min(X1, 124) thay vào thành:

Min(
Max(x, 70), 124)

Ghi chú:

Nếu so sánh với 124 trước ta có quy trình khác:

If(x>124, 124, x)
Min(x, 124)


Ta được số mới là X2. So X2 với 70:

Max(X2, 70)
Thay vào:

Max(Min(x, 124), 70)

Còn If thì dùng loại trừ:

=IF(x>124,124,IF(A1<70,70,x))
 
Cám ơn Bác Ptm, mình hiểu rồi. Min của 2 số là "Nếu A nhỏ hơn thì lấy A, ngược lại thì lấy B", giống như If.
Nhân tiện Bác có nói: If là dùng phương pháp loại trừ, vậy xin Bác 1 bài nữa về suy luận loại trừ. Xin cám ơn trước.
 
Cám ơn Bác Ptm, mình hiểu rồi. Min của 2 số là "Nếu A nhỏ hơn thì lấy A, ngược lại thì lấy B", giống như If.
Nhân tiện Bác có nói: If là dùng phương pháp loại trừ, vậy xin Bác 1 bài nữa về suy luận loại trừ. Xin cám ơn trước.
Tặng bạn bài toán dùng MIN để tính ngày công đây! Bài toán như sau:
- Cell A2 đến A30 là ngày công, dao động trong khoảng từ 0 đến 31
- Số công chuẩn trong tháng được quy định = 26 công
- Ai làm nhiều hơn 26 công thì số ngày thừa ra sẽ được tính gấp đôi

-----------------
Với bài này, nếu dùng IF thì có phải sẽ dùng công thức:
PHP:
=IF(A2<=26,A2,26+(A2-26)*2)
hoặc cách khác:
PHP:
=2*A2-IF(A2<=26,A2,26)
Còn dùng MIN, tôi sẽ rút gọn thành:
PHP:
=2*A2-MIN(A2,26)
Có lý không?
 

File đính kèm

Lần chỉnh sửa cuối:
Trước tiên cần nói cho rõ là Min, Max của 2 số, có suy luận tương đương 1 hàm If. Nhưng không thể nói ngược lại "If tương đương Min hoặc Max"

Vì nếu If so sánh 2 số với nhau, rồi nếu thỏa điều kiện lấy số thứ 3, ngược lại lấy số thứ 4, thì không dùng Min, Max thay thế được. Ngoài ra, dùng If để lấy kết quả text thì có phải Min, max đâu.

Thế nên chỉ có thể nói If dùng phương pháp loại trừ. Nếu thỏa điều kiện thì lấy giá trị A, ngược lại lấy giá trị B tức là: sau khi loại trừ các trường hợp thỏa điều kiện, còn lại tất cả các trường hợp khác, lấy giá trị B.

Thí dụ: If(X=1, 5, 10) sẽ xét 1 số X có bằng 1 hay không, thì lấy giá trị 5, còn tất cả trường hợp khác sau khi loại trừ số 1 ra (X = 2, 3, 4, ..., -1, -2, ...), hàm If sẽ lấy giá trị 10.

Tựa như cô Tấm nhặt đậu xanh và đậu đỏ lẫn lộn trong rổ: nhặt hết đậu đỏ bỏ ra ngoài thì trong rổ còn lại đậu xanh.

Mở rộng ra 2 điều kiện, dùng 2 If lồng nhau, tựa như cô Tấm nhặt 3 loại đậu xanh, đỏ, trắng lẫn lộn: nhặt đậu xanh trước, còn lại đỏ và trắng, nhặt tiếp đỏ còn lại trắng đó mà.

Nhân nói đến cô Tấm nhặt đậu:

1.Nếu trong rổ có 2 loại xanh và đỏ, cô Tấm sẽ nhặt loại nào ra trước? Nếu là tôi, tôi sẽ xem loại nào ít hơn, tôi nhặt ra trước. Có phải làm vậy sẽ nhanh hơn không?
2. Nếu trong rổ có nhiều loại đậu, và yêu cầu lấy riêng đậu trắng nấu xôi, còn xanh đỏ tím vàng thì bỏ vào nồi chè tất tần tật, thì bạn nhặt loại đậu nào? Đừng nói là nhặt xanh trước, đến đỏ, đến vàng, rồi đến trắng nhặt sau à nha.

Áp dụng vào If: Bạn sẽ chọn cách nào trong 2 cách sau:

If(Or(A1="đỏ", A1="xanh"), "nấu chè", "nấu xôi")
If(A1="trắng", "nấu xôi", "nấu chè")

Đấy, cũng là loại trừ, nhưng ta sẽ loại trừ ít ra, còn lại nhiều, thay vì loại nhiều ra, còn lại ít.
 
Lần chỉnh sửa cuối:
Cám ơn Bác Ptm, bác cho thí dụ cô Tấm thật hình tượng và dễ hiểu

Dear Mr ndu,
Anh cho 1 thí dụ ứng dụng cũng rất hay, mấu chốt vẫn phải hiểu được "gốc rễ suy luận" như bác Ptm giải thích, rồi sau đó mình mới tự ứng dụng cho trường hợp khác được ạ.
Mình cũng mới thấy 1 thí dụ ứng dụng Min ở đây: http://www.giaiphapexcel.com/forum/...n-đề-giải-đáp-các-bài-tập&p=286912#post286912
Trong đó Bạn nhỏ linhngoc tính cước quốc tế:

=1000*IF(D15=4;MIN(C15;5)*10+IF(AND(B15>=1/4;B15<=3/4);8;5)*MAX((C15-5);0);0)

Bây giờ đọc hiểu liền, và sau này mình sẽ tự áp dụng được.
 
Em có một bài tập liên quan đến hàm Min, max mong các anh chị chỉ giúp.
Cụ thể là: Em muốn tách dữ liệu ở 1 cột thành hai cột x và y và tìm giá trị Y(max) đồng thời tìm giá trị X tương ứng với Y (max) đó. Các anh chị ai biết chỉ dùm em với, càng nhanh càng tốt.
 

File đính kèm

em xin lỗi chưa nêu đầy đủ ý của câu hỏi em xin bổ sung như sau:
cột X có giá trị: 300.000 , cột y có giá trị 0.267
 
Em có một bài tập liên quan đến hàm Min, max mong các anh chị chỉ giúp.
Cụ thể là: Em muốn tách dữ liệu ở 1 cột thành hai cột x và y và tìm giá trị Y(max) đồng thời tìm giá trị X tương ứng với Y (max) đó. Các anh chị ai biết chỉ dùm em với, càng nhanh càng tốt.
- Tìm Y(max): {=MAX(RIGHT(A1:A1203,5)*1)} (đây là công thức mảng, bạn nhập phần trong cặp dấu {} rồi nhấn Ctrl+Enter)
- Tìm X tương ứng với Y(max): =LEFT(VLOOKUP("*"&B1,A1:A1203,1,0),7)*1
 
X =LEFT(A2;7)*1
Y =SUBSTITUTE(RIGHT(A2;5);".";",")*1
Ymax =dễ òm
Xmax =INDEX(vùng X;MATCH(Ymax;vùng Y;0))
 
Cảm ơn sự giúp đơx của các bác nhưng em làm thử rùi vẫn chưa được. Các bác có thể xử lí trên file đính kèm rùi gửi lại cho em được không ạ. Cảm ơn các bác nhiều.
 
Cảm ơn sự giúp đơx của các bác nhưng em làm thử rùi vẫn chưa được. Các bác có thể xử lí trên file đính kèm rùi gửi lại cho em được không ạ. Cảm ơn các bác nhiều.
Làm chon bạn luôn đây:
Tim X
PHP:
=SUBSTITUTE(LEFT($A1,FIND(" ",$A1)-1),".","")/1000
Tìm Y
PHP:
=SUBSTITUTE(MID($A1,FIND(" ",$A1)+1,LEN($A1)),".","")/1000
Tim MAX X
PHP:
=MAX($B$1:$B$1203)
Tìm Y tương ứng với MAX X
PHP:
=VLOOKUP($E$2,$B$1:$C$1203,2,0)
Nói thêm:
- Bạn có thể dùng công cụ Text to Column (trong menu Data) để làm bài này
- Tất cả các giải pháp ở các bài ở trên có thể sai nếu như Control Panel của máy bạn quy định dấu thập phân là dấu phẩy
 

File đính kèm

Cảm ơn sự giúp đơx của các bác nhưng em làm thử rùi vẫn chưa được. Các bác có thể xử lí trên file đính kèm rùi gửi lại cho em được không ạ. Cảm ơn các bác nhiều.
Bạn xem trong file đính kèm nhé. Ở bài trên, mình không để ý yêu cầu của bạn là tách dữ liệu thành 2 cột X, Y nên dùng công thức như vậy, cũng quên giải thích B1 trong công thức ở bài trên là ô chứa Y(max).
 

File đính kèm

Bạn xem trong file đính kèm nhé. Ở bài trên, mình không để ý yêu cầu của bạn là tách dữ liệu thành 2 cột X, Y nên dùng công thức như vậy, cũng quên giải thích B1 trong công thức ở bài trên là ô chứa Y(max).
Thử vào Control Panel đặt lại dấu thập phân là dấu phẩy rồi test công thức xem
Ẹc... Ẹc...

untitled.JPG
 
Thử vào Control Panel đặt lại dấu thập phân là dấu phẩy rồi test công thức xem
Ẹc... Ẹc...

View attachment 57207
Tất nhiên là với dữ liệu của tác giả câu hỏi thì dấu thập phân phải là dấu chấm chứ đâu phải là dấu phẩy. Nếu là dấu phẩy thì 0.267 hay 0.214,...đâu phải là những số có nghĩa mà tìm Max.
em xin lỗi chưa nêu đầy đủ ý của câu hỏi em xin bổ sung như sau:
cột X có giá trị: 300.000 , cột y có giá trị 0.267
 
Tất nhiên là với dữ liệu của tác giả câu hỏi thì dấu thập phân phải là dấu chấm chứ đâu phải là dấu phẩy. Nếu là dấu phẩy thì 0.267 đâu phải là một số có nghĩa mà tìm Max.
Cái đó đương nhiên tôi biết (và tác giả cũng biết, bạn cũng biết)... nhưng bạn có từng nghĩ đến việc tác giả mang file này sang máy tính khác để chạy không? (chuyện rất thường) ----> Và cũng chắc gì tác giả đã biết tại chính máy mình hiện Control Panel đang setup thế nào?
Tức là: ta HIỂU số 0.267không phẩy hai sáu bẩy là 1 chuyện, để Excel HIỂU là chuyện hoàn toàn khác
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom