Hàm đánh giá theo tiêu chuẩn

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

kidkute

Thành viên mới
Tham gia
31/8/22
Bài viết
11
Được thích
0
Chào anh em,
Mình có file excel về đánh giá chất lượng sản phẩm theo các tiêu chuẩn tương ứng, nhờ anh em hỗ trợ giúp mình nhé
Cảm ơn anh em rất nhiều
Chi tiết theo file đính kèm!
 

File đính kèm

  • Đánh giá SP.xlsx
    11 KB · Đọc: 27
Chào anh em,
Mình có file excel về đánh giá chất lượng sản phẩm theo các tiêu chuẩn tương ứng, nhờ anh em hỗ trợ giúp mình nhé
Cảm ơn anh em rất nhiều
Chi tiết theo file đính kèm!
Mã:
M3 =IF((F3>E3)*(F3<>"KPH")+(E3="KPH")*ISNUMBER(F3)*(F3>1)+(H3>G3)*(H3<>"KPH")+(G3="KPH")*ISNUMBER(H3)*(H3>1)+(J3>I3)*(J3<>"KPH")+(I3="KPH")*ISNUMBER(J3)*(J3>1)+(L3>K3)*(L3<>"KPH")+(K3="KPH")*ISNUMBER(L3)*(L3>1),"KĐ","Đạt")
Copy xuống . . .
 
Cái bảng tính này căn bản là để xem cho đẹp mắt chứ về mặt tính toán thì được thiết lập bởi một kẻ dốt về lô gic.

Theo lô gic túm lại thì KPH tương đương vớii 0.
Nếu Excel 365 thì đặt một hàm Lambda chuyển KPH thành 0 (hoặc một số âm)
Các phiên bản khác thì bắt buộc phải tính từng trị.

Hàm khủng bố thì như vầy:
=IF(SUMPRODUCT(--(CHOOSE({1;2;3;4},IF($E3<>"KPH",$E3,0),IF($G3<>"KPH",$G3,0),IF($I3<>"KPH",$I3,0),IF($K3<>"KPH",$K3,0))>CHOOSE({1;2;3;4},IF($F3<>"KPH",$F3,-1),IF($H3<>"KPH",$H3,1),IF($J3<>"KPH",$J3,-1),IF($L3<>"KPH",$L3,-1)))) >= 4, "Đạt", "KĐ")

Hàm nhẹ hơn chút:
=IF(SUM(--LET(theRg, $E3:$L3, (FILTER(IF(theRg<>"KPH", theRg, 0),ISODD(COLUMN(theRg)))>FILTER(IF(theRg<>"KPH", theRg, -1),ISEVEN(COLUMN(theRg))))))>= 4, "Đạt", "KĐ")

Hàm ăn gian:
=IF(SUMPRODUCT(--(IF($E3:$L3<>"KPH",$E3:$L3,-1)<{-9,100,-9,200,-9,0,-9,10}))>= 4, "Đạt", "KĐ")
 
Lần chỉnh sửa cuối:
Góp vui công thức
=IF(AND((SUBSTITUTE(INDEX(E3:L3;1;{1;3;5;7});"KPH";0)-SUBSTITUTE(INDEX(E3:L3;1;{2;4;6;8});"KPH";0))>=0);"Đạt";"KĐ")
Nhớ ctrl shift enter.
 
Lần chỉnh sửa cuối:
Cái bảng tính này căn bản là để xem cho đẹp mắt chứ về mặt tính toán thì được thiết lập bởi một kẻ dốt về lô gic.

Theo lô gic túm lại thì KPH tương đương vớii 0.
Nếu Excel 365 thì đặt một hàm Lambda chuyển KPH thành 0 (hoặc một số âm)
Các phiên bản khác thì bắt buộc phải tính từng trị.

Hàm khủng bố thì như vầy:
=IF(SUMPRODUCT(--(CHOOSE({1;2;3;4},IF($E3<>"KPH",$E3,0),IF($G3<>"KPH",$G3,0),IF($I3<>"KPH",$I3,0),IF($K3<>"KPH",$K3,0))>CHOOSE({1;2;3;4},IF($F3<>"KPH",$F3,-1),IF($H3<>"KPH",$H3,1),IF($J3<>"KPH",$J3,-1),IF($L3<>"KPH",$L3,-1)))) >= 4, "Đạt", "KĐ")

Hàm nhẹ hơn chút:
=IF(SUM(--LET(theRg, $E3:$L3, (FILTER(IF(theRg<>"KPH", theRg, 0),ISODD(COLUMN(theRg)))>FILTER(IF(theRg<>"KPH", theRg, -1),ISEVEN(COLUMN(theRg))))))>= 4, "Đạt", "KĐ")

Hàm ăn gian:
=IF(SUMPRODUCT(--(IF($E3:$L3<>"KPH",$E3:$L3,-1)<{-9,100,-9,200,-9,0,-9,10}))>= 4, "Đạt", "KĐ")
Mỗi bảng tính khi hiển thị vậy đều có mục đích bạn à, nếu gán KPH thành giá trị 0 thì hàm đơn giản rồi
Mà KPH ở đây không mặc định bằng 0 như bạn nói
Ở mỗi phương pháp phân tích thì KPH có thể khác nhau như 0.1%, 10 mg/L .... nhưng các giá trị này không đc hiển thị, mà phải nằm ở 1 mục riêng sau khi trả kết quả
Cảm ơn bạn đã trả lời chủ đề nhé
 
16902496930146567365071751875903.jpg
Sao em thấy vẫn đúng mà.
Máy trên em đang xài là office 2013, không có nối mạng nên em chụp tạm. Thậm chí còn không cần ctrl shift enter.
 
Sao em thấy vẫn đúng mà.
Máy trên em đang xài là office 2013, không có nối mạng nên em chụp tạm. Thậm chí còn không cần ctrl shift enter.
Nó chỉ so sánh kết quả đầu tiên, và lờ đi các kết quả tiếp theo.

Nó không hoạt động trong tiêu chuẩn 2,3,4. Xem file đính kèm.
.
 

File đính kèm

  • Đánh giá SP_LmoovoenX.xlsx
    11.3 KB · Đọc: 7
Lần chỉnh sửa cuối:
Nó chỉ so sánh kết quả đầu tiên, và lờ đi các kết quả tiếp theo.
À, đúng rồi bác. Excel bản 2013 chỉ nhận giá trị đầu. Em mới thử lại bên bản 365 thì nó nhận tất cả giá trị.
Bên 365 bấm ctrl shift enter nó chỉ nhận giá trị đầu. Còn bấm enter không thì nó lại nhận hết.
Cảm ơn bác. Không có phát hiện này cứ đi áp dụng với các bản cũ thì chết.
Vậy sửa thành sumproduct, hoặc product là được.
=IF(PRODUCT(--((SUBSTITUTE(INDEX(E3:L3,1,{1;3;5;7}),"KPH",0)-SUBSTITUTE(INDEX(E3:L3,1,{2;4;6;8}),"KPH",0))>=0)),"Đạt","KĐ")
 

File đính kèm

  • Đánh giá SP_LmoovoenX.xlsx
    12.5 KB · Đọc: 4
Mỗi bảng tính khi hiển thị vậy đều có mục đích bạn à, nếu gán KPH thành giá trị 0 thì hàm đơn giản rồi
Mà KPH ở đây không mặc định bằng 0 như bạn nói
Ở mỗi phương pháp phân tích thì KPH có thể khác nhau như 0.1%, 10 mg/L .... nhưng các giá trị này không đc hiển thị, mà phải nằm ở 1 mục riêng sau khi trả kết quả
Cảm ơn bạn đã trả lời chủ đề nhé
Bạn cần học thêm về căn bản chuyển dạng trị để so sánh.
A và B chỉ so sánh được nếu chúng cùng dạng, cùng loại, cùng đơn vị.
Môn Vật lý lớp 10-11 có phần dạy về cái này.

Góp vui công thức
=IF(AND((SUBSTITUTE(INDEX(E3:L3;1;{1;3;5;7});"KPH";0)-SUBSTITUTE(INDEX(E3:L3;1;{2;4;6;8});"KPH";0))>=0);"Đạt";"KĐ")
Nhớ ctrl shift enter.
Tôi chưa thử công thức trên nhưng nhìn sơ qua thì có điểm này:
- Điều kiện so sánh ở bảng này là nhỏ hơn. Kể cả KPH. Vì vậy, nếu chuyển từ ký hiệu sang số thì phải chuyển ra hai trị khác nhau.

Chú thích 1: Thực ra, tối qua tôi giải bài này hơi muộn, buồn ngủ quá cho nên chỉ giải bằng lô gic trực tiếp.
Nếu chịu khó ngồi tom góp lại thì chỉ có hai vấn đề chính:
1. Bảng dỏm, dữ liệu không đồng bộ cho nên phải có cách đồng bộ hóa.
2. Thiết kế trẹo tay lái cho nên phải có cách lấy mảng lủng (filter mảng).

Chú thích 2: Tôi dùng 365 để cho bà con thấy cách dùng hàm Let. Chứ các phiên bản trước thì ở đây có rất nhiều người làm rồi, tôi không cần bận tâm.
Bài này dùng Lambda thì có lẽ ngon. Nhưng Lambda hơi khó giải thích cho nên chắc phải đợi 1 vài năm nữa, bà con từ từ quen.
 
Lần chỉnh sửa cuối:
Bạn cần học thêm về căn bản chuyển dạng trị để so sánh.
A và B chỉ so sánh được nếu chúng cùng dạng, cùng loại, cùng đơn vị.
Môn Vật lý lớp 10-11 có phần dạy về cái này.


Tôi chưa thử công thức trên nhưng nhìn sơ qua thì có điểm này:
- Điều kiện so sánh ở bảng này là nhỏ hơn. Kể cả KPH. Vì vậy, nếu chuyển từ ký hiệu sang số thì phải chuyển ra hai trị khác nhau.

Chú thích 1: Thực ra, tối qua tôi giải bài này hơi muộn, buồn ngủ quá cho nên chỉ giải bằng lô gic trực tiếp.
Nếu chịu khó ngồi tom góp lại thì chỉ có hai vấn đề chính:
1. Bảng dỏm, dữ liệu không đồng bộ cho nên phải có cách đồng bộ hóa.
2. Thiết kế trẹo tay lái cho nên phải có cách lấy mảng lủng (filter mảng).

Chú thích 2: Tôi dùng 365 để cho bà con thấy cách dùng hàm Let. Chứ các phiên bản trước thì ở đây có rất nhiều người làm rồi, tôi không cần bận tâm.
Bài này dùng Lambda thì có lẽ ngon. Nhưng Lambda hơi khó giải thích cho nên chắc phải đợi 1 vài năm nữa, bà con từ từ quen.
Bằng hàm của bác HieuCD đã giải quyết xong nha bạn

Còn bạn muốn thể hiện thêm về lambda thì làm cái chủ đề riêng nhé,

Góp ý thêm nhé bạn: Mọi người lên đây đều vui vẻ đóng góp, nếu cảm thấy không thích thì đừng góp ý, còn nếu góp ý rồi thì bạn đừng có thái độ coi thường người khác nhé bạn.
Bài đã được tự động gộp:

Nhờ admin đóng chủ đề này giúp nhé!
Cảm ơn mọi người đã giúp đỡ!
 
Cái này em xài and() tương đương với hàm sum() mà bác.
Khi dùng mảng thì And và Or khá nguy hiểm, cần phải test đầy đủ.

Lý do: hàm lô gic (And/Or) trong bảng tính Excel có tính chất "đi tắt nếu có thể"
Ví dụ: And(False, True, True) thì Excel chỉ xét tham đầu, thấy False rồi thì nó biết không cần xét tiếp hai tham còn lại. Tương tự Or(False, True,True) thì Excel chỉ cần xét đến tham thứ hai.

Đính chính: điều trên đã được chứng minh là không đúng. Và tôi đã xác nhận là mình nhầm. Xin xem bài #17, #18, #19 bên dưới.

...
Còn bạn muốn thể hiện thêm về lambda thì làm cái chủ đề riêng nhé,

Góp ý thêm nhé bạn: Mọi người lên đây đều vui vẻ đóng góp, nếu cảm thấy không thích thì đừng góp ý, còn nếu góp ý rồi thì bạn đừng có thái độ coi thường người khác nhé bạn.
...
Nhờ admin đóng chủ đề này giúp nhé!
Cảm ơn mọi người đã giúp đỡ!
Đọc lại luật diễn đàn đi.
Bài lên đây là tự động thành sở hữu của diễn đàn. Bạn không hề có chủ quyền với bất cứ vật gì trong thớt này.

Cái tư tưởng "có bài giải rồi thì xong" là tư tưởng ích kỷ. Không hề quan tâm đến người khác có thể học hỏi.

Phương pháp tôi chỉ dẫn cho các người khác cách sử dụng Excel có đúng hay không là do Ban Quản Trị thẩm xét. Bạn không có quyền gì cả.
 
Lần chỉnh sửa cuối:
Khi dùng mảng thì And và Or khá nguy hiểm, cần phải test đầy đủ.

Lý do: hàm lô gic (And/Or) trong bảng tính Excel có tính chất "đi tắt nếu có thể"
Ví dụ: And(False, True, True) thì Excel chỉ xét tham đầu, thấy False rồi thì nó biết không cần xét tiếp hai tham còn lại. Tương tự Or(False, True,True) thì Excel chỉ cần xét đến tham thứ hai.
Em thích cách giải thích của bác về tính giao nhau của mảng trong trường hợp này hơn. (Em không nhớ bác dùng thuật ngữ gì)
Theo cách hiểu của em, với excel 365, các mảng là mảng động, các phép tính được thực hiện với tất cả các phần tử của mảng. Nên nếu em dùng and hoặc or ở đây nó vẫn ra kết quả đúng. Kể cả tính chất đi tắt đón đầu mà bác nói ở trên nó cũng sẽ giúp excel đỡ phải tính toán hơn.

Đối với excel bản cũ, hoặc 365 nhưng bấm ctrl shift enter, tùy thuộc vào số ô mà mình chọn trước khi kết thúc công thức, mà excel quyết định sẽ tính toán với bao nhiêu phần tử của mảng. Như hình ở #10, nếu chỉ chọn 1 ô thì excel nó chỉ tính mỗi phần tử đầu của mảng, trả true với ô c17 và false với ô c18.

Trên đây là kiến thức em rút ra được nhờ đọc mấy bài của bác về mảng, và với góp ý của bác @Phuocam cho lỗi sai của em ở mấy post đầu. Mong các bác góp ý + chỉnh lý nếu có sai sót.
 
...
Đối với excel bản cũ, hoặc 365 nhưng bấm ctrl shift enter, tùy thuộc vào số ô mà mình chọn trước khi kết thúc công thức, mà excel quyết định sẽ tính toán với bao nhiêu phần tử của mảng. Như hình ở #10, nếu chỉ chọn 1 ô thì excel nó chỉ tính mỗi phần tử đầu của mảng, trả true với ô c17 và false với ô c18.
...
Với một hàm, Excel bắt buộc phải tính mọi tham số trước khi gọi hàm và nạp tham số
Ví dụ ta có hai hàm người dùng ToTi() và TiTe():
Choose(1, ToTi(), TiTe())
Thì Excel sẽ gọi cả hai hàm ToTi và TiTe, tuy rằng kết quả của công thức kia là kết quả trả về của hàm ToTi.

Hàm lô gic (And/Or) là hàm đặc biệt không theo luật "tính hết" này.
And(ToTi(), TiTe())
TiTe có được gọi hay không tùy theo kết quả của ToTi.

Vì ở GPE này, hàm người dùng chỉ được gọi trực tiếp cho nên các bạn không thấy điểm quan trọng của ví dụ trên.

Thứ nhất: biết đặc tính của And/Or, ta có thể tính toán hiệu quả.
Nếu TiTe rất nhỏ (chạy rất nhanh) so với ToTi, ta có thể đặt nó trước. Khả năng ToTi không được gọi sẽ giúp bảng tính chạy nhanh hơn.

Thứ hai: nếu hai hàm có liên hệ với nhau qua một biến [toàn cục] nào đó, việc gọi hàm nào trước có thể cho ra kết quả khác nhau.

Đính chính: điều trên đã được chứng minh là không đúng. Và tôi đã xác nhận là mình nhầm. Xin xem bài #17, #18, #19 bên dưới.
 
Lần chỉnh sửa cuối:
Hàm lô gic (And/Or) là hàm đặc biệt không theo luật "tính hết" này.
And(ToTi(), TiTe())
TiTe có được gọi hay không tùy theo kết quả của ToTi.
Em thử gọi hàm And trên sheet, và 2 UDF như bác nói nhưng msgbox vẫn hiển thị:
Hàm trên sheet: And(ToTi(), TiTe())
Code trong module:
Mã:
Function ToTi() As Boolean
    ToTi = False
End Function

Function TiTe() As Boolean
    TiTe = True
    MsgBox "TiTe da duoc goi"
End Function

Và em cũng có test một kiểu đơn giản hơn trên sheet: And(FALSE,1/0) thì hàm and vẫn trả về lỗi chứ không phải là false.
 
Em thử gọi hàm And trên sheet, và 2 UDF như bác nói nhưng msgbox vẫn hiển thị:
Hàm trên sheet: And(ToTi(), TiTe())
Code trong module:
Mã:
Function ToTi() As Boolean
    ToTi = False
End Function

Function TiTe() As Boolean
    TiTe = True
    MsgBox "TiTe da duoc goi"
End Function

Và em cũng có test một kiểu đơn giản hơn trên sheet: And(FALSE,1/0) thì hàm and vẫn trả về lỗi chứ không phải là false.
Xin lỗi. Tôi nhầm với cái khác.
Đúng là And/Or không phải hàm ngoại lệ.
IF mới là hàm ngoại lệ.
IF(1, ToTi(), TiTe()) thì TiTe không chạy
Choose cũng ngoại lệ, nó chỉ tính tham ứng với choose.
CHOOSE(2, ToTi(), TiTe()) thì ToTi không chạy

Xin lỗi mọi người, xin bỏ qua các bài trước đây về short circuit.
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom