^^! thực ra là không phải ai cũng cài office 2016, có những người còn đang dùng office2003, nếu mình đi chỗ khác mở file của mình lên thì hàm không thể chạy được nên mình muốn tích hợp thêm code vào.Cái này người ta nói "Chở củi về rừng"
- những hàm ifs có thể sử dụng sumproduct để áp dụng đc ở cả các phiên bản.Em thấy phiên bản 2016 có mấy hàm rất hay, nhờ các bạn viết code cho hàm
1.IFS
2. SWITCH
3. HÀM MINIFS VÀ MAXIFS
4.
CONCAT
Tôi đang dùng Excel 2016, đã kiểm tra aà chẳng thấy có hàm nào giống với danh sách trênEm thấy phiên bản 2016 có mấy hàm rất hay, nhờ các bạn viết code cho hàm
1.IFS
2. SWITCH
3. HÀM MINIFS VÀ MAXIFS
4.
CONCAT
Dạ em hay dùng hàm if, thầy viết dùm cho em hàm này thôi ạ:Tôi đang dùng Excel 2016, đã kiểm tra aà chẳng thấy có hàm nào giống với danh sách trên
Tuy nhiên, nếu muốn viết cũng không sao. Đầu tiên ta bắt đầu với CONCAT đi nha. Vậy bạn vui lòng cho biết:
- CONCAT của bạn có chức năng gì?
- CONCAT của bạn cho kết quả thế nào?
vân... vân... rồi ta tiếp
anh Bill mà nhìn thấy các các điều kiện và kết quả lỗi kiểu nầy chắc khóc ra tiếng TàoDạ em hay dùng hàm if, thầy viết dùm cho em hàm này thôi ạ:
Hàm if bình thường thường phải lồng rất nhiều if, rất dễ bị nhầm VD: =IF(B2>50, 40, IF(B2>40, 35, IF(B2>30, 30, IF(B2>20, 20, IF(B2>10, 15, IF(B2>5, 5, 0)))))
Hàm ifs: =IFS(B2>50, 40, B2>40, 35, B2>30, 30, B2>20, 20, B2>10, 15, B2>5, 5, TRUE, 0)
Cú pháp hàm IFS
IFS(logical_test1, value_if_true1, [logical_test2, value_if_true2]…)
Hàm có 2 phần bắt buộc và 2 phần không bắt buộc.
Hàm IFS cho phép bạn đánh giá tới 127 điều kiện khác nhau. Nếu 1 điều kiện logical_test không có kết quả value_if_true, hàm sẽ thông báo “You’ve entered too few arguments for this function” (Bạn nhập quá ít mệnh đề cho hàm này). Nếu điều kiện logical_test được đánh giá và có kết quả khác ngoài TRUE hoặc FALSE, hàm IFS sẽ trả lỗi #VALUE!. Nếu không có điều kiện nào có kết quả TRUE, hiển thị lỗi #N/A.
- logical_test1 là phần bắt buộc. Đây là điều kiện để đánh giá TRUE hoặc FALSE.
- value_if_true1 là phần bắt buộc thứ 2, là kết quả nếu điều kiện ở logical_test 1 là TRUE. Nếu cần thiết có thể để trống.
- logical_test 2…logical_test127 là không bắt buộc, là điều kiện để đánh giá TRUE hoặc FALSE.
- value_if_true2…value_if_true127 là phần không bắt buộc, là kết quả nếu điều kiện ở logical_testN là TRUE. Mỗi value_if_trueN tương ứng với điều kiện ở logical_testN, có thể bỏ trống.
Theo như bạn mô tả ở chỗ màu đỏ thì tôi nghĩ không cần phải viết thêm gì cả. Cứ lập 1 bảng tra rồi dùng VLOOKUP là xongDạ em hay dùng hàm if, thầy viết dùm cho em hàm này thôi ạ:
Hàm if bình thường thường phải lồng rất nhiều if, rất dễ bị nhầm VD: =IF(B2>50, 40, IF(B2>40, 35, IF(B2>30, 30, IF(B2>20, 20, IF(B2>10, 15, IF(B2>5, 5, 0)))))
Hàm ifs: =IFS(B2>50, 40, B2>40, 35, B2>30, 30, B2>20, 20, B2>10, 15, B2>5, 5, TRUE, 0)
Cú pháp hàm IFS
IFS(logical_test1, value_if_true1, [logical_test2, value_if_true2]…)
Hàm có 2 phần bắt buộc và 2 phần không bắt buộc.
Hàm IFS cho phép bạn đánh giá tới 127 điều kiện khác nhau. Nếu 1 điều kiện logical_test không có kết quả value_if_true, hàm sẽ thông báo “You’ve entered too few arguments for this function” (Bạn nhập quá ít mệnh đề cho hàm này). Nếu điều kiện logical_test được đánh giá và có kết quả khác ngoài TRUE hoặc FALSE, hàm IFS sẽ trả lỗi #VALUE!. Nếu không có điều kiện nào có kết quả TRUE, hiển thị lỗi #N/A.
- logical_test1 là phần bắt buộc. Đây là điều kiện để đánh giá TRUE hoặc FALSE.
- value_if_true1 là phần bắt buộc thứ 2, là kết quả nếu điều kiện ở logical_test 1 là TRUE. Nếu cần thiết có thể để trống.
- logical_test 2…logical_test127 là không bắt buộc, là điều kiện để đánh giá TRUE hoặc FALSE.
- value_if_true2…value_if_true127 là phần không bắt buộc, là kết quả nếu điều kiện ở logical_testN là TRUE. Mỗi value_if_trueN tương ứng với điều kiện ở logical_testN, có thể bỏ trống.
Function gpeSWITCH(Str As String) As Variant
If InStr("CN;T2;T3;T4;T5;T6;T7;", Str) Then
gpeSWITCH = Switch(Str = "T2", 1, Str = "T3", 2, Str = "T4", 3, Str = "T5", 4, Str = "T6", 5, Str = "T7", 6, Str = "CN", "0")
Else
gpeSWITCH = "Cút Xéo"
End If
End Function
Bắt chước thử xem saoDạ em hay dùng hàm if, thầy viết dùm cho em hàm này thôi ạ:
Hàm if bình thường thường phải lồng rất nhiều if, rất dễ bị nhầm VD: =IF(B2>50, 40, IF(B2>40, 35, IF(B2>30, 30, IF(B2>20, 20, IF(B2>10, 15, IF(B2>5, 5, 0)))))
Hàm ifs: =IFS(B2>50, 40, B2>40, 35, B2>30, 30, B2>20, 20, B2>10, 15, B2>5, 5, TRUE, 0)
Cú pháp hàm IFS
IFS(logical_test1, value_if_true1, [logical_test2, value_if_true2]…)
Hàm có 2 phần bắt buộc và 2 phần không bắt buộc.
Hàm IFS cho phép bạn đánh giá tới 127 điều kiện khác nhau. Nếu 1 điều kiện logical_test không có kết quả value_if_true, hàm sẽ thông báo “You’ve entered too few arguments for this function” (Bạn nhập quá ít mệnh đề cho hàm này). Nếu điều kiện logical_test được đánh giá và có kết quả khác ngoài TRUE hoặc FALSE, hàm IFS sẽ trả lỗi #VALUE!. Nếu không có điều kiện nào có kết quả TRUE, hiển thị lỗi #N/A.
- logical_test1 là phần bắt buộc. Đây là điều kiện để đánh giá TRUE hoặc FALSE.
- value_if_true1 là phần bắt buộc thứ 2, là kết quả nếu điều kiện ở logical_test 1 là TRUE. Nếu cần thiết có thể để trống.
- logical_test 2…logical_test127 là không bắt buộc, là điều kiện để đánh giá TRUE hoặc FALSE.
- value_if_true2…value_if_true127 là phần không bắt buộc, là kết quả nếu điều kiện ở logical_testN là TRUE. Mỗi value_if_trueN tương ứng với điều kiện ở logical_testN, có thể bỏ trống.
Function IFS(ByVal logical_test1 As Boolean, ByVal value_if_true1 As Variant, ParamArray More_logical() As Variant) As Variant
Dim TmpVal As Variant, Check As Boolean, IsLogical As Boolean, bTrue As Boolean
If logical_test1 Then
IFS = value_if_true1
Else
For Each TmpVal In More_logical
IsLogical = Not IsLogical
If Not bTrue Then
If IsLogical Then
If TmpVal Then Check = True
ElseIf Check Then
bTrue = True
IFS = TmpVal
End If
End If
Next
If IsLogical Then
MsgBox "You've entered too few arguments for this function", vbOKOnly, "Microsoft Office Excel"
ElseIf Not Check Then
IFS = CVErr(xlErrNA)
End If
End If
End Function
Function IFS(ByVal Logical_1 As Boolean, ByVal Value_If_True_1 As Variant, ParamArray More_logical() As Variant) As Variant
Dim Tmp As Variant, IsLogical As Boolean, i As Byte
If Logical_1 Then
IFS = Value_If_True_1
Else
For i = LBound(More_logical) To UBound(More_logical)
IsLogical = Not IsLogical
If IsLogical Then
If i = UBound(More_logical) Then IFS = More_logical(i): Exit Function
If More_logical(i) Then IFS = More_logical(i + 1): Exit Function
End If
Next i
IFS = False
End If
End Function
bắt chước bạn HuuThang_BD
cú pháp:=IFS(dk1,Val if dk1 true,[dk2,Val if dk2 true],...,[Val if tất cả dk false])
kết quả trả lổi giống hàm IF của ExcelMã:Function IFS(ByVal Logical_1 As Boolean, ByVal Value_If_True_1 As Variant, ParamArray More_logical() As Variant) As Variant Dim Tmp As Variant, IsLogical As Boolean, i As Byte If Logical_1 Then IFS = Value_If_True_1 Else For i = LBound(More_logical) To UBound(More_logical) IsLogical = Not IsLogical If IsLogical Then If i = UBound(More_logical) Then IFS = More_logical(i): Exit Function If More_logical(i) Then IFS = More_logical(i + 1): Exit Function End If Next i IFS = False End If End Function
nhiều cái mình không hiểu chỉ làm liều bắt chước các bạn, cám ơn bạn đã nhiều lần hướng dẫn, mình sẽ nghiên cứu và hoàn thiện lạiĐề nghị đại khái:
1. dùng luôn paramarray conds(), khỏi phải phân biêt điều kiện đầu tiên
2. trước khi bắt đầu tính, test số phần tử pt = ubound(conds) - lbound(conds)
if (pt < 2) or (pt and 1) then ' số phần tử là số lẻ
error
exit function
3. Cách test logical của bạn quá dễ dãi, néu ngừoi nhập đặt sai vị trí thì nó cũng có khả năng chấp nhận
For i = LBound(More_logical) To UBound(More_logical) step 2
Tránh bớt một số lỗi nếu ngừoi nhập không đúng
Chú: thực ra, theo tiếng Anh thì more ngầm chứa số nhiều: more_logicals mới đúng văn phạm
Chú 2: Val if tất cả các điều kiện false:
khi dùng hàm này, người dùng sẽ tự đặt phần này
IFS( test1, res1, test2, cond2, ...., True, resChoConLai)
Tôi đang dùng Excel 2016, đã kiểm tra aà chẳng thấy có hàm nào giống với danh sách trên
Dạ em hay dùng hàm if, thầy viết dùm cho em hàm này thôi ạ:
Hàm if bình thường thường phải lồng rất nhiều if, rất dễ bị nhầm VD: =IF(B2>50, 40, IF(B2>40, 35,
IF(B2>30, 30, IF(B2>20, 20, IF(B2>10, 15, IF(B2>5, 5, 0)))))
Hàm ifs: =IFS(B2>50, 40, B2>40, 35, B2>30, 30, B2>20, 20, B2>10, 15, B2>5, 5, TRUE, 0)
Cú pháp hàm IFS
IFS(logical_test1, value_if_true1, [logical_test2, value_if_true2]…)
^^! thực ra là không phải ai cũng cài office 2016, có những người còn đang dùng office2003, nếu mình đi chỗ khác mở file của mình lên thì hàm không thể chạy được nên mình muốn tích hợp thêm code vào.
đã chỉnh lại codeĐề nghị đại khái:
1. dùng luôn paramarray conds(), khỏi phải phân biêt điều kiện đầu tiên
2. trước khi bắt đầu tính, test số phần tử pt = ubound(conds) - lbound(conds)
if (pt < 2) or (pt and 1) then ' số phần tử là số lẻ
error
exit function
3. Cách test logical của bạn quá dễ dãi, néu ngừoi nhập đặt sai vị trí thì nó cũng có khả năng chấp nhận
For i = LBound(More_logical) To UBound(More_logical) step 2
Tránh bớt một số lỗi nếu ngừoi nhập không đúng
Chú: thực ra, theo tiếng Anh thì more ngầm chứa số nhiều: more_logicals mới đúng văn phạm
Chú 2: Val if tất cả các điều kiện false:
khi dùng hàm này, người dùng sẽ tự đặt phần này
IFS( test1, res1, test2, cond2, ...., True, resChoConLai)
đã chỉnh lại codeĐề nghị đại khái:
1. dùng luôn paramarray conds(), khỏi phải phân biêt điều kiện đầu tiên
2. trước khi bắt đầu tính, test số phần tử pt = ubound(conds) - lbound(conds)
if (pt < 2) or (pt and 1) then ' số phần tử là số lẻ
error
exit function
3. Cách test logical của bạn quá dễ dãi, néu ngừoi nhập đặt sai vị trí thì nó cũng có khả năng chấp nhận
For i = LBound(More_logical) To UBound(More_logical) step 2
Tránh bớt một số lỗi nếu ngừoi nhập không đúng
Chú: thực ra, theo tiếng Anh thì more ngầm chứa số nhiều: more_logicals mới đúng văn phạm
Chú 2: Val if tất cả các điều kiện false:
khi dùng hàm này, người dùng sẽ tự đặt phần này
IFS( test1, res1, test2, cond2, ...., True, resChoConLai)
Function IFS(ParamArray cond_Vals() As Variant) As Variant
Dim i As Byte, Msg As String, Title As String
If UBound(cond_Vals) = LBound(cond_Vals) Then
MsgBox "Phai nhap it nhat 2 tham so" & Chr(10) & Chr(10) & "=IFS( LogicalTest1, ValueIfTrue1, " & "[LogicalTest2, ValueIfTrue2]" & Chr(10) & " , . . . , [ValueIfFalse])", vbOKOnly, "Cong thuc bi loi!"
IFS = CVErr(xlErrRef)
Exit Function
End If
For i = LBound(cond_Vals) To UBound(cond_Vals) Step 2
If i = UBound(cond_Vals) Then IFS = cond_Vals(i): Exit Function
If cond_Vals(i) Then IFS = cond_Vals(i + 1): Exit Function
Next i
IFS = False
End Function
Cảm ơn các bác nhiều. Để em testđã chỉnh lại code
đã chỉnh lại codeMã:Function IFS(ParamArray cond_Vals() As Variant) As Variant Dim i As Byte, Msg As String, Title As String If UBound(cond_Vals) = LBound(cond_Vals) Then MsgBox "Phai nhap it nhat 2 tham so" & Chr(10) & Chr(10) & "=IFS( LogicalTest1, ValueIfTrue1, " & "[LogicalTest2, ValueIfTrue2]" & Chr(10) & " , . . . , [ValueIfFalse])", vbOKOnly, "Cong thuc bi loi!" IFS = CVErr(xlErrRef) Exit Function End If For i = LBound(cond_Vals) To UBound(cond_Vals) Step 2 If i = UBound(cond_Vals) Then IFS = cond_Vals(i): Exit Function If cond_Vals(i) Then IFS = cond_Vals(i + 1): Exit Function Next i IFS = False End Function
Thưa thầy! nguyên nhân là khi đi sang máy khác cần phải chỉnh sửa, hoặc gửi cho người khác xem thì hàm vẫn có thể dùng được ạ, vì em thấy hàm mới hữu hiệu hơn nhiều ạ.. em cảm ơn thầy ạ!Nói cho cùng t
Nhóm hàm này chỉ có trong phiên bản Office 365, KHÔNG PHẢI MẶC NHIÊN TRONG 2016 như chủ thớt nói.
Như tôi đã giải thích ở trên, nhóm hàm này khong phải là phiên bản 2016 bình thường. Chúng thuộc mớ hàng đặc biệt mà MS đưa ra như một con mồi dụ ngừoi ta xài 365.
Nếu cty bạn xài 365 thì tự nhiên mọi máy đều phải đồng bộ, việc dùng phiên bản cũ nghe không hợp lý lắm.
Viết hàm VBA thay thế thì cũng khong sao. Nhưng bạn cũng nên nói rõ nguyên do.
Bạn đi chỗ khác mà mở file có VBA lên, chủ máy khong sợ vi rút à?