Nhờ các bạn viết giùm mình hàm tự tạo bằng VBA

  • Thread starter Thread starter 790312
  • Ngày gửi Ngày gửi
Liên hệ QC

790312

Thành viên hoạt động
Tham gia
7/4/08
Bài viết
181
Được thích
8
Mình có 1 bảng tính cần dùng hàm if với nhiều điều kiện.Mình có gửi file đính kèm mong các các bạn viết giúp mình hàm này bằng VBA.Chân thành cảm ơn trước.
 

File đính kèm

Muốn giúp bạn lắm, nhưng ngặt nổi

(1) NẾU A=<0.25 VÀ 0.1=< B=<0 VÀ 0=<C =<5 THÌ CÓ TẠI Ô A1 CHẲNG HẠN SẼ BẰNG. .

(2) NẾU 0.25<A=<0.5 VÀ 0.1=< B=<0 VÀ 0=<C =<5 THÌ CÓ TẠI Ô A1 SẼ BẰNG . . .

(3) NẾU 0.5<A VÀ 0.1=< B=<0 VÀ 0=<C =<5 THÌ CÓ TẠI Ô A1 SẼ BẰNG . . .

gặp ba hòn đá tảng này nên không biết làm sao?!
 
Upvote 0
Cho mình xin lỗi,mình đánh nhầm 0.1=<B=<5 cho cả 3 trường hợp trên.Mình gửi lại file đính kèm.Chân thành cảm ơn bạn trước.
 

File đính kèm

Upvote 0
Dùng SWITCH() sẽ sáng sủa hơn

PHP:
Option Explicit
Function KQuaCua3So(Aa As Double, Bb As Double, Cc As Double)
 If Cc < 0 Then
   KQuaCua3So = "Err":                    Exit Function
 End If
 If Cc > 5 Then
   KQuaCua3So = Switch(Aa <= 0.25, 1.2, Aa <= 0.5, 1.25, Aa > 0.5, 1.3)
 Else
   If 5 < Bb And Bb < 20 Then
      KQuaCua3So = Switch(Aa <= 0.25, 1.2, Aa <= 0.5, 1.25, Aa > 0.5, 1.4 - 0.2 * Cc)
   ElseIf Bb >= 0.1 And Bb <= 5 Then
      KQuaCua3So = Switch(Aa <= 0.25, (1.45 - 0.05 * Bb) - 0.01 * (5 - Bb) * Cc, _
         Aa <= 0.5, (1.75 - 0.1 * Bb) - 0.02 * (5 - Bb) * Cc, _
         Aa > 0.5, (1.9 - 0.1 * Bb) - 0.02 * (6 - Bb) * Cc)
   End If
 End If
End Function
 

File đính kèm

Upvote 0
Cho mình xin lỗi,mình đánh nhầm 0.1=<B=<5 cho cả 3 trường hợp trên.Mình gửi lại file đính kèm.Chân thành cảm ơn bạn trước.
Thêm cho Bạn 1 công thức với hàm IF nữa nè!
VD: ô B1 có giá trị là A, C1 có giá trị là B, D1 có giá trị là C => Tại ô A1 nhập công thức sau:
Mã:
=IF(AND(C2>=0.1,C2<=5,D2>=0,D2<=5),IF(B2<=0.25,(1.45-0.05*C2)-0.01*(5-C2)*D2,IF(B2<=0.5,(1.75-0.1*C2)-0.02*(5-C2)*D2,(1.9-0.1*C2)-0.02*(6-C2)*D2)),IF(AND(C2>5,C2<20,D2>=0,D2<=5),IF(B2<=0.25,1.2,IF(B2<=0.5,1.25,1.4-0.2*D2)),IF(D2>5,IF(B2<=0.25,1.2,IF(B2<=0.5,1.25,1.3)))))
Kiểm tra thử có đúng không nhé!
 

File đính kèm

Upvote 0
Chào Bạn SA_DQ!
Trong trường hợp này ta dùng câu lệnh Select Case ....... thay cho nhiều trường hợp IF được không bạn?
 
Upvote 0
Chào Bạn SA_DQ!
Trong trường hợp này ta dùng câu lệnh Select Case ....... thay cho nhiều trường hợp IF được không bạn?
Hoàn toàn được và còn dễ kiểm soát, hiệu chỉnh. Chỉ có điều trông có vẻ cồng kềnh 1 chút
 
Upvote 0
Muốn Select Case, thì Select Case & tất tần tật đều Select Case

Bạn viết đi cho tôi học với!, nhiều biến quá tôi chưa viết được.
PHP:
Option Explicit
Function ForCase(Xx As Double, Yy As Double, Zz As Double)
 If Zz < 0 Then
   ForCase = "Error":              Exit Function
 End If
 Select Case Zz
 Case Is <= 5
   Select Case Yy
   Case Is < 0.1, Is > 20
      ForCase = "Err"
   Case Is <= 5
      Select Case Xx
      Case Is <= 0.25
         ForCase = (1.45 - 0.05 * Yy) - 0.01 * (5 - Yy) * Zz
      Case Is <= 0.5
         ForCase = (1.75 - 0.1 * Yy) - 0.02 * (5 - Yy) * Zz
      Case Is > 0.5
         ForCase = (1.9 - 0.1 * Yy) - 0.02 * (6 - Yy) * Zz
      End Select
   Case Is < 20
      Select Case Xx
      Case Is <= 0.25
         ForCase = 1.2
      Case Is <= 0.5
         ForCase = 1.25
      Case Is > 0.5
         ForCase = 1.4 - 0.2 * Zz
      End Select
   End Select
 Case Is > 5
   Select Case Xx
   Case Is <= 0.25
      ForCase = 1.2
   Case Is <= 0.5
      ForCase = 1.25
   Case Is > 0.5
      ForCase = 1.3
   End Select
 End Select
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
PHP:
Option Explicit
Function KQuaCua3So(Aa As Double, Bb As Double, Cc As Double)
If Cc < 0 Then
KQuaCua3So = "Err": Exit Function
End If
If Cc > 5 Then
KQuaCua3So = Switch(Aa <= 0.25, 1.2, Aa <= 0.5, 1.25, Aa > 0.5, 1.3)
Else
If 5 < Bb And Bb < 20 Then
KQuaCua3So = Switch(Aa <= 0.25, 1.2, Aa <= 0.5, 1.25, Aa > 0.5, 1.4 - 0.2 * Cc)
ElseIf Bb >= 0.1 And Bb <= 5 Then
KQuaCua3So = Switch(Aa <= 0.25, (1.45 - 0.05 * Bb) - 0.01 * (5 - Bb) * Cc, _
Aa <= 0.5, (1.75 - 0.1 * Bb) - 0.02 * (5 - Bb) * Cc, _
Aa > 0.5, (1.9 - 0.1 * Bb) - 0.02 * (6 - Bb) * Cc)
End If
End If
End Function
Switch ý nghĩa cuả nó là gì vậy bạn?Thanks
 
Upvote 0
Switch ý nghĩa cuả nó là gì vậy bạn?Thanks

1./ Nếu nhờ công cụ ngôn ngữ của Google thì ta được những kết quả sau:
PHP:
  (*) Công tắc;                             (*) Cây roi
            (*) Công tắc điện;                     (*)  Quay mau lẹ
            (*) Bật mở điện;                         (*) Lọn tóc giả
            (*) Que gổ mềm;                        (*) Đánh bằng roi
Trong đó theo mình nghĩa sát nhất trong ngữ cảnh này là công tắc, cái chuyển mạch

2./ Nếu trong cửa sổ VBE, ta nhập ' SWITCH(); (Nhớ có dấu nháy dùm cái nha); Sau đó bôi chuột lên chữ switch() & nhấn {F1}, VBE sẽ đưa ta đến các dòng như sau:


Switch Function

Evaluates a list of expressions and returns a Variant value or an expression associated with the first expression in the list that is True.
Syntax
Switch(expr-1, value-1[, expr-2, value-2 [, expr-n,value-n]])
The Switch function syntax has these parts:
Part Description expr Required. Variant expression you want to evaluate. value Required. Value or expression to be returned if the corresponding expression is True.

Remarks
The Switch function argument list consists of pairs of expressions and values. The expressions are evaluated from left to right, and the value associated with the first expression to evaluate to True is returned. If the parts aren't properly paired, a run-time error occurs. For example, if expr-1 is True, Switch returns value-1. If expr-1 is False, but expr-2 is True, Switch returns value-2, and so on.
Switch returns a Null value if:

  • None of the expressions is True.
  • The first True expression has a corresponding value that is Null.
Switch evaluates all of the expressions, even though it returns only one of them. For this reason, you should watch for undesirable side effects. For example, if the evaluation of any expression results in a division by zero error, an error occurs.


Về tiếnh Anh thì cũng đang i tờ, nếu bạn thấy khó khăn fần dịch thuật thì sang BOX ngôn ngữ của diễn đàn nhờ các bạn rành rẽ giúp cho!

3./

Còn mình thì hiểu nó như sau:
Là hàm của VBA, tính năng mà nó đem lại tương đương hàm cách viết câu lệnh
PHP:
         If . . . . 
           ElseIf . . . . . 
          . . . . . 
             Else
          . . . . . . 
          End If
Hay giống cú fáp Select Case như trên.

Mình chưa thật sự đi đến tận cùng của hàm này, nhưng đã thử với trên trăm tham số hàm vẫn chạy tốt.

Thí dụ:
PHP:
 GPE = SWITCH(jJ=0,1, Jj=1,-2,. . . . . . , Jj=113, -114)
Ta hiểu là Nếu Jj là số chẵn thì biến GPE sẽ bằng jJ +1
Còn Jj là số lẽ thì biến GPE sẽ là số âm của số mà giá trị tuyệt đối của nó bằng jj & trừ thêm 1

Những mong giúp được ít nhiều cho bạn.

--=0
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom