Những vấn đề về hàm IF

Liên hệ QC
Status
Không mở trả lời sau này.
Bác Springrain836 chỉ ra đúng rồi. Nhưng em không biết bác làm như thế nào cả. Bác chỉ chi tiết cho em được không?
 
Ặc. Phần list thứ 2 em làm nó toàn báo lỗi bác ah. Làm bên file bác gửi thì ko sao nhưng mang sang file em cần làm thì nó báo lỗi: "A name range you specified cannot be found". Em không hiểu sao cả.

Bác Springrain836 chỉ ra đúng rồi. Nhưng em không biết bác làm như thế nào cả. Bác chỉ chi tiết cho em được không?

1. Bạn vào Menu/Insert/name/Define sẽ thấy có một số Name trong đó, nghiên cứu kỹ các Name này.

2. Trong file có hai Combobox tạo từ Forms, bạn click chuột phải lên từng combobox một và chọn format control, nghiên cứu kỹ các tùy chọn trong Tab Control sẽ rõ.
 
Hàm IF lồng nhau

Mình có cú pháp hàm IF lồng nhau như sau:
=IF(Biểu thức logic,biểu thưc1, IF(Biểu thức logic2, biểu thức 2,...,IF(Biểu thức logic N, biểu thức N)))
Mọi người góp ý xem như vậy có đúng k?
Có người bảo mình cú pháp khác như sau:
=IF(Biểu thức logic,biểu thưc1, IF(Biểu thức logic2, biểu thức 2,...,IF(Biểu thức logic N, biểu thức N, N+1))...)
Liệu cú pháp nào là đúng hả các bạn?
Giúp mình với.
 
Cả 2 đều đúng bạn à, tùy theo nhu cầu sử dụng mà thôi:
Trong trường hợp 1 sử dụng để cho chính xác KQ của mọi trường hợp, nếu không có thì báo lỗi.
Trường hợp 2 thì không có báo lỗi, nếu không có KQ trong các IF trước thì trả về KQ cuối cùng (n+1).
 
Hàm IF lồng vào nhau không thể nào đến N số lần logic được đâu bạn ơi!
Tối đa chỉ có thể dùng được 8 lần Logic ứng với 9 đáp số và ứng với N = 8 thôi.
Vậy nếu muốn vô tận thì bạn phải dùng cách khác thôi!
Ví dụ: =(Logic 1)*KQ1+(Logic 2)*KQ2+....+(Logic N)*KQN
Vậy thì sẽ được đó.
Vì 1 Logic = True tức là thỏa thì sẽ cho ra kết quả là 1. Và 1 nhân với KQ của Logic đó sẽ ra đáp số của Logic cần tìm.
Vậy bạn cứ thử nghiệm với các logic của bạn xem rồi đối chiếu sẽ thấy cách này là cách hữu dụng nhất nhưng đôi khi cũng hơi khó dùng đó. Hiiii
Chúc vui.
Thân.
 
Hàm IF lồng vào nhau không thể nào đến N số lần logic được đâu bạn ơi!
Tối đa chỉ có thể dùng được 8 lần Logic ứng với 9 đáp số và ứng với N = 8 thôi.
Vậy nếu muốn vô tận thì bạn phải dùng cách khác thôi!
Ví dụ: =(Logic 1)*KQ1+(Logic 2)*KQ2+....+(Logic N)*KQN
Vậy thì sẽ được đó.
Vì 1 Logic = True tức là thỏa thì sẽ cho ra kết quả là 1. Và 1 nhân với KQ của Logic đó sẽ ra đáp số của Logic cần tìm.
Vậy bạn cứ thử nghiệm với các logic của bạn xem rồi đối chiếu sẽ thấy cách này là cách hữu dụng nhất nhưng đôi khi cũng hơi khó dùng đó. Hiiii
Chúc vui.
Thân.
Có nhiều cách để kéo hàm IF ra nhưng không VÔ TẬN được đâu ---> Dù là thay bằng VLOOKUP thì cũng có giới hạn chứ
 
Hàm IF lồng vào nhau không thể nào đến N số lần logic được đâu bạn ơi!
Tối đa chỉ có thể dùng được 8 lần Logic ứng với 9 đáp số và ứng với N = 8 thôi.
Vậy nếu muốn vô tận thì bạn phải dùng cách khác thôi!
Ví dụ: =(Logic 1)*KQ1+(Logic 2)*KQ2+....+(Logic N)*KQN
Vậy thì sẽ được đó.
Vì 1 Logic = True tức là thỏa thì sẽ cho ra kết quả là 1. Và 1 nhân với KQ của Logic đó sẽ ra đáp số của Logic cần tìm.
Vậy bạn cứ thử nghiệm với các logic của bạn xem rồi đối chiếu sẽ thấy cách này là cách hữu dụng nhất nhưng đôi khi cũng hơi khó dùng đó. Hiiii
Chúc vui.
Thân.
Cách của Po_Pikachu chỉ đúng khi KQ1, KQ2,..., KQnkiểu số (number), còn nếu KQ1, KQ2,...,KQn không phải là kiểu số thì coi như xong!
Ví dụ: (Điểm>=5)*"Trung Bình" + (Điểm>=7)*"Khá" ==> không được!

Một cách khác tham khảo dùng Choose nhé, đây là công thức tổng quát, áp dụng vào từng bài toán cụ thể có thể khác chút xíu:
PHP:
=Choose(((Logic_1)+1,(Logic_2)+2,.....(Logic_n)+n),KQ1.KQ2,......,KQn)
Lúc này KQ1,KQ2,....,KQn là gì thì tùy ý; thậm chí nó có thể là một Mảng dữ liệu (Range) dùng để tham chiếu cũng được!
 
Lần chỉnh sửa cuối:
Đúng vậy! Em quên xét trường hợp là text.
Nhưng hàm Choose có thể bỏ bớt việc + n số liên tiếp được không? Vì nó là điều kiện lớn hơn hoặc bằng và là chuổi liên tiếp mà. Vậy nếu ví dụ có 4 hạng: "Yếu", "Trung Bình", "Khá", "Giỏi". Thì em sẽ biết như sau:
=CHOOSE((C6>=0)+(C6>=3)+(C6>=6)+(C6>=8),"Yếu","Trung Bình","Khá","Giỏi")
Thân.
 
Nhưng hàm Choose có thể bỏ bớt việc + n số liên tiếp được không? Vì nó là điều kiện lớn hơn hoặc bằng và là chuổi liên tiếp mà. Vậy nếu ví dụ có 4 hạng: "Yếu", "Trung Bình", "Khá", "Giỏi". Thì em sẽ biết như sau:
PHP:
=CHOOSE((C6>=0)+(C6>=3)+(C6>=6)+(C6>=8),"Yếu","Trung Bình","Khá","Giỏi")
Dĩ nhiên là được, mình vẫn hay dùng như cách Po_Kikachu vừa trình bày. Cho nên mình mới nói là "tùy từng bài toán cụ thể" mà tùy cơ ứng biến - Vô chiêu thắng hữu chiêu mà!
 
Cho em hỏi đề bài yêu cầu là:"nếu ngày đến vào tháng 1 hoặc tháng 5 thì thành tiền= 20%*ngày ở *đơn giá ngày, còn nếu ngày đến vào tháng khác thì thành tiền= ngày ở*đơn giá ngày" công thức ở đây phải làm như thế nào ạ?
 
Cho em hỏi đề bài yêu cầu là:"nếu ngày đến vào tháng 1 hoặc tháng 5 thì thành tiền= 20%*ngày ở *đơn giá ngày, còn nếu ngày đến vào tháng khác thì thành tiền= ngày ở*đơn giá ngày" công thức ở đây phải làm như thế nào ạ?
Bạn dùng công thức sau:
[Thành tiền] =[Đơn giá ngày]*Choose(Or(Month([NgàyĐến])=1,Month([NgàyĐến])=5))+1,[NgàyỞ],[NgàyỞ]*20%)
 
các bác làm hộ em bài này với
cảm ơn rất nhiều

!$@!!
 

File đính kèm

  • Book1.xls
    15 KB · Đọc: 35
Ca_Dafi đã viết:
Bạn dùng công thức sau:
[Thành tiền] =[Đơn giá ngày]*CHOOSE(OR(MONTH([NgàyĐến])=1,MONTH([NgàyĐến])=5))+1,[NgàyỞ],[NgàyỞ]*20%)
Công thức trên dư một dấu đóng ngoặc đơn của hàm CHOOSE, trước chỗ +1:
[Thành tiền] =[Đơn giá ngày]*CHOOSE(OR(MONTH([NgàyĐến])=1,MONTH([NgàyĐến])=5)+1,[NgàyỞ],[NgàyỞ]*20%)

Dùng IF ngắn hơn:
[Thành tiền] =[Đơn giá ngày]*IF(OR(MONTH([NgàyĐến])=1,MONTH([NgàyĐến])=5),[NgàyỞ]*20%,[NgàyỞ])​
Hay là khỏi cần IF luôn:
[Thành tiền] =[Đơn giá ngày]*[NgàyỞ]*(1-(OR(MONTH([NgàyĐến])=1,MONTH([NgàyĐến])=5)*80%)​
 
Lần chỉnh sửa cuối:
Hay là khỏi cần IF luôn:
[Thành tiền] =[Đơn giá ngày]*[NgàyỞ]*(1-(OR(MONTH([NgàyĐến])=1,MONTH([NgàyĐến])=5)*80%)
Hình như là 20%, chứ không phải 80% anh BNTT ơi!
Lỡ rồi, em làm công thức này luôn vậy, không cần Ctrl+Shift+Enter:
[Thành tiền] =[Đơn giá ngày]*[NgàyỞ]*(1-20%*SUM(--(MONTH([NgàyĐến])={1,5})))

Với công thức này, nếu ta có thêm vài điều kiện tháng nữa vào thì công thức chỉ dài thêm tối đa vài ký tự tương đương với số điều kiện thêm vào nữa thôi! Ví dụ bài toán trên, nếu điều kiện là: hoặc tháng của ngày đến là 1,4,5,9 thì được giảm 20%, ta chỉ cần thêm vào mảng điều kiện là xong:
[Thành tiền] =[Đơn giá ngày]*[NgàyỞ]*(1-20%*SUM(--(MONTH([NgàyĐến])={1,4,5,9})))
 
Lần chỉnh sửa cuối:
Hình như là 20%, chứ không phải 80% anh BNTT ơi!
80% chứ sao lại 20%? Em không thấy anh lấy 1 trừ đi à?
Người ta nói, nếu .... thì thành tiền= 20%*ngày ở *đơn giá ngày mà!
20% giá, tức là lấy nguyên giá trừ đi 80% giá.
A*20% với lại A*(1-80%) là mấy thứ ?

Đừng chỉ nhìn công thức mà đánh giá. Hãy tạo thử một dữ liệu, áp dụng công thức vào, xem nó đúng hay sai, rồi hẵng kết luận, nhé!

Thêm cái sai này nữa, cái anh bôi màu đỏ:
Với công thức này, nếu ta có thêm vài điều kiện tháng nữa vào thì công thức chỉ dài thêm tối đa vài ký tự tương đương với số điều kiện thêm vào nữa thôi! Ví dụ bài toán trên, nếu điều kiện là: hoặc tháng của ngày đến là 1,4,5,9 thì được giảm 20%, ta chỉ cần thêm vào mảng điều kiện là xong:
Giảm 20% giábằng 20% giá là hai chuyện hoàn toàn khác nhau! Đọc lại đề bài nhé:
Cho em hỏi đề bài yêu cầu là:
Nếu ngày đến vào tháng 1 hoặc tháng 5 thì thành tiền = 20%*ngày ở *đơn giá ngày
Nếu ngày đến vào tháng khác thì thành tiền = ngày ở*đơn giá ngày
Công thức ở đây phải làm như thế nào ạ?
 
Lần chỉnh sửa cuối:
Đúng là nhầm to nhỉ! Hôm nay em có vấn đề rồi! Đúng là 80% chứ không phải là 20%! Cảm ơn anh BNTT.
 
Trời mọi người đưa ra nhiều công thức quá, ở đây em chỉ sử dụng hàm if thôi và cũng đã làm được bài này rồi. Nhưng rất cảm ơn mọi người đã giúp em!!
 
Status
Không mở trả lời sau này.
Web KT
Back
Top Bottom