Hỏi về điều kiện trong VBA

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

311280

Thành viên hoạt động
Tham gia
12/7/09
Bài viết
111
Được thích
8
Các bạn cho mình hỏi: Thí dụ mình có 1 hàm tự tạo
Function a(b as double,c as double,d as double)
if b<0 then
a=c*100/5 nhưng phải nhỏ hơn 3.1*d nếu không thì thoát hàm
..................
Chân thành cảm ơn trước.
 
Các bạn cho mình hỏi: Thí dụ mình có 1 hàm tự tạo
Function a(b as double,c as double,d as double)
if b<0 then
a=c*100/5 nhưng phải nhỏ hơn 3.1*d nếu không thì thoát hàm
..................
Chân thành cảm ơn trước.
Thử thế này xem sao
Mã:
Public Function aaa(b As Double, c As Double, d As Double)
    Dim J As Double
        J = (c * 100 / 5) - 3.1 * d
            If b < 0 And J < 0 Then
                aaa = c * 100 / 5
            Else
                aaa = "": Exit Function
            End If
End Function
Sao c*100/5 không viết là c*20 nhỉ???
Thân
 
Upvote 0
Em xin phép mượn Codes của anh Cogia, thử thế này xem sao
PHP:
Public Function aaa(b As Double, c As Double, d As Double)
    Dim J As Double
        J = (c * 20) - 3.1 * d
        If b < 0 Then 
            If J < 0 Then
                aaa = c * 20
            endif
        Else
            aaa = Empty
        End If
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Đoạn code chính của mình là như thế này:
Function bb(E As Double, m As Double, lda1 As Double, beta As Double, f As Double, apha As Double, us As Double)
If apha <= 0.5 And lda1 < 2 And m >= 1 Then
bb = (1.3 + 0.15 * lda1 ^ 2) * Sqr(E / f)
Else
If apha <= 0.5 And lda1 >= 2 And m >= 1 Then
bb = (1.2 + 0.35 * lda1) * Sqr(E / f)
Else
If apha >= 1 Then
bb = 4.35 * Sqr((2 * apha - 1) * E / (us * (2 - apha + Sqr(apha ^ 2 + 4 * beta ^ 2))))
End If
End If
End If
End Function
Phần chữ đậm màu đen thì được rồi nhưng phần dưới mình muốn nếu trường hợp :
apha <= 0.5 And lda1 >= 2 And m >= 1
thì :bb = (1.2 + 0.35 * lda1) * Sqr(E / f) nhưng phải nhỏ hơn 3.1*sqr(E/f)
và nếu tiếp theo :
If apha >= 1 Then
bb = 4.35 * Sqr((2 * apha - 1) * E / (us * (2 - apha + Sqr(apha ^ 2 + 4 * beta ^ 2))))
nhưng phải nhỏ hơn 3.8*sqr(E/f)
Mong các bạn giúp mình.Chân thành cảm ơn trước.
 
Lần chỉnh sửa cuối:
Upvote 0
Đoạn code chính của mình là như thế này:
Function bb(E As Double, m As Double, lda1 As Double, beta As Double, f As Double, apha As Double, us As Double)
If apha <= 0.5 And lda1 < 2 And m >= 1 Then
bb = (1.3 + 0.15 * lda1 ^ 2) * Sqr(E / f)
Else
If apha <= 0.5 And lda1 >= 2 And m >= 1 Then
bb = (1.2 + 0.35 * lda1) * Sqr(E / f)
Else
If apha >= 1 Then
bb = 4.35 * Sqr((2 * apha - 1) * E / (us * (2 - apha + Sqr(apha ^ 2 + 4 * beta ^ 2))))
End If
End If
End If
End Function
Phần chữ đậm màu đen thì được rồi nhưng phần dưới mình muốn nếu trường hợp :
apha <= 0.5 And lda1 >= 2 And m >= 1
thì :bb = (1.2 + 0.35 * lda1) * Sqr(E / f) nhưng phải nhỏ hơn 3.1*sqr(E/f)
và nếu tiếp theo :
If apha >= 1 Then
bb = 4.35 * Sqr((2 * apha - 1) * E / (us * (2 - apha + Sqr(apha ^ 2 + 4 * beta ^ 2))))
nhưng phải nhỏ hơn 3.8*sqr(E/f)
Mong các bạn giúp mình.Chân thành cảm ơn trước.
Làm gọn Function của bạn một xíu:
PHP:
Function bb(E As Double, m As Double, lda1 As Double, beta As Double, f As Double, apha As Double, us As Double)
    If apha <= 0.5 And lda1 < 2 And m >= 1 Then
        bb = (1.3 + 0.15 * lda1 ^ 2) * Sqr(E / f)
    ElseIf apha <= 0.5 And lda1 >= 2 And m >= 1 Then
        bb = WorksheetFunction.Min((1.2 + 0.35 * lda1), 3.1) * Sqr(E / f)
    ElseIf apha >= 1 Then
        bb = WorksheetFunction.Min(4.35 * Sqr((2 * apha - 1) * E / (us * (2 - apha + Sqr(apha ^ 2 + 4 * beta ^ 2)))), 3.8 * Sqr(E / f))
    Else
        bb = Empty
    End If
End Function
Giải thích:
bb = (1.2 + 0.35 * lda1) * Sqr(E / f) nhưng phải nhỏ hơn 3.1*sqr(E/f)
thể hiện bởi câu lệnh sau (sử dụng hàm Min trong Excel để tìm giá trị nhỏ hơn trong 2 giá trị: (1.2 + 0.35 * lda1) * Sqr(E / f)3.1*sqr(E/f)):
bb = WorksheetFunction.Min((1.2 + 0.35 * lda1), 3.1) * Sqr(E / f)
 
Upvote 0
Làm gọn Function của bạn một xíu:
PHP:
Function bb(E As Double, m As Double, lda1 As Double, beta As Double, f As Double, apha As Double, us As Double)
If apha <= 0.5 And lda1 < 2 And m >= 1 Then
bb = (1.3 + 0.15 * lda1 ^ 2) * Sqr(E / f)
ElseIf apha <= 0.5 And lda1 >= 2 And m >= 1 Then
bb = WorksheetFunction.Min((1.2 + 0.35 * lda1), 3.1) * Sqr(E / f)
ElseIf apha >= 1 Then
bb = WorksheetFunction.Min(4.35 * Sqr((2 * apha - 1) * E / (us * (2 - apha + Sqr(apha ^ 2 + 4 * beta ^ 2)))), 3.8 * Sqr(E / f))
Else
bb = Empty
End If
End Function
Giải thích:

thể hiện bởi câu lệnh sau (sử dụng hàm Min trong Excel để tìm giá trị nhỏ hơn trong 2 giá trị: (1.2 + 0.35 * lda1) * Sqr(E / f)3.1*sqr(E/f)):

Cái này không phải ý của mình,ý mình là:
ElseIf apha <= 0.5 And lda1 >= 2 And m >= 1 Then
bb =(1.2 + 0.35 * lda1)* Sqr(E / f)
Nếu giá trị này lớn hơn 3.1*Sqr(E / f) thì báo lỗi chứ không phải láy giá trị nhỏ trong 2 giá trị đó
ElseIf apha >= 1 Then
bb =4.35 * Sqr((2 * apha - 1) * E / (us * (2 - apha + Sqr(apha ^ 2 + 4 * beta ^ 2))))
Nếu giá trị này lớn hơn 3.8*Sqr(E / f) thì báo lỗi chứ không phải láy giá trị nhỏ trong 2 giá trị đó
Mong các bạn sửa giùm mình.Chân thành cảm ơn.
 
Lần chỉnh sửa cuối:
Upvote 0
Không ai giúp được mình sao?Hay là VBA không xử lý được trường hợp này?Chân thành cảm ơn.
 
Upvote 0
Cái này ý mình là:
ElseIf apha <= 0.5 And lda1 >= 2 And m >= 1 Then
bb =(1.2 + 0.35 * lda1)* Sqr(E / f)
Nếu giá trị này lớn hơn 3.1*Sqr(E / f) thì báo lỗi chứ không phải láy giá trị nhỏ trong 2 giá trị đó
ElseIf apha >= 1 Then
bb =4.35 * Sqr((2 * apha - 1) * E / (us * (2 - apha + Sqr(apha ^ 2 + 4 * beta ^ 2))))
Nếu giá trị này lớn hơn 3.8*Sqr(E / f) thì báo lỗi chứ không phải láy giá trị nhỏ trong 2 giá trị đó
Mong các bạn sửa giùm mình.Chân thành cảm ơn.

(1)bb =(1.2 + 0.35 * lda1)* Sqr(E / f) fảinhỏ hơn 3.1 * SQR(E/f)

Nên viết thành điều kiện này là (1.2 + 0.35 * lda1)* Sqr(E / f)< 3.1 * SQR(E/f)

Giản lược, ta còn 1.2 + 0.35 * Ida1 < 3.1
Hay 0.35 * Ida1 < 3.1 - 1.2 ; Cuối cùng sẽ là 0.35 *Ida1 < 1.9
Ta sẽ đưa điều kiện này để tính trong trường hợp đầu, như sau

If apha <= 0.5 And lda1 >= 2 And m >= 1 and 0.35 *Ida1 < 1.9 Then

( Thật ra chúng ta cũng cần kiểm lại khi Ida1 >=2 có thỏa 0.35 * Ida1 < 1.9 hay không )

(2) Cũng tương tự ta làm với mệnh đề điều kiện 2;

(3) Nếu không thỏa 1 trong 2 điều trên thì báo lỗi
(như BB = "Not thing" )
 
Upvote 0
Web KT

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

Back
Top Bottom