Nhờ giải đáp VBA với câu lệnh If...then...Else

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

marconi

Thành viên mới
Tham gia
20/6/11
Bài viết
2
Được thích
0
Nhờ các bác giúp chạy Function bên dưới, không hiểu sai chỗ nào mà nó chưa chạy dc? Thanks!

Public Function MX3(X3, DeltaX2) As Double
Dim X3 As Double
Dim DeltaX2 As Double
If DeltaX2 > 0 And (DeltaX2 - 10) > 10 Then
MX3 = X3 - 0.0015
ElseIf (DeltaX2 - 10) < 10 Then
MX3 = X3 - 0.001
ElseIf DeltaX2 < 10 Then
MX3 = X3
ElseIf DeltaX2 < 0 And (DeltaX2 + 10) < -10 Then
MX3 = X3 + 0.0015
ElseIf DeltaX2 < 0 And (DeltaX2 + 10) > -10 Then
MX3 = X3 + 0.001
Else
MX3 = X3
End If
End If
End If
End If
End If
End Function
 
Nhờ các bác giúp chạy Function bên dưới, không hiểu sai chỗ nào mà nó chưa chạy dc? Cảm ơn!

Public Function MX3(X3, DeltaX2) As Double
Dim X3 As Double
Dim DeltaX2 As Double
If DeltaX2 > 0 And (DeltaX2 - 10) > 10 Then
MX3 = X3 - 0.0015
ElseIf (DeltaX2 - 10) < 10 Then
MX3 = X3 - 0.001
ElseIf DeltaX2 < 10 Then
MX3 = X3
ElseIf DeltaX2 < 0 And (DeltaX2 + 10) < -10 Then
MX3 = X3 + 0.0015
ElseIf DeltaX2 < 0 And (DeltaX2 + 10) > -10 Then
MX3 = X3 + 0.001
Else
MX3 = X3
End If
End If
End If
End If
End If
End Function
Mình không rành code, bạn có thể giải thích giúp mình mấy điểm không?
+) DeltaX2 > 0 And (DeltaX2 - 10) > 10 có thể rút gọn thành (DeltaX2 - 10) > 10 hoặc thậm chí là DeltaX2 > 20 không
+ Chỗ này
ElseIf (DeltaX2 - 10) < 10 Then
MX3 = X3 - 0.001
ElseIf DeltaX2 < 10 Then
MX3 = X3
theo bạn kết quả sẽ trả về có như chủ đích nếu DeltaX2 = 5.
+) ElseIf DeltaX2 < 0 And (DeltaX2 + 10) < -10 có thể rút gọn thành DeltaX2 < -20 không?
 
Upvote 0
Bạn xóa bớt endif đi chỉ để 1 cái thôi, hoặc có thể chuyển thành select case
 
Upvote 0
Nhờ các bác giúp chạy Function bên dưới, không hiểu sai chỗ nào mà nó chưa chạy dc? Cảm ơn!

Public Function MX3(X3, DeltaX2) As Double
Dim X3 As Double
Dim DeltaX2 As Double
If DeltaX2 > 0 And (DeltaX2 - 10) > 10 Then
MX3 = X3 - 0.0015
ElseIf (DeltaX2 - 10) < 10 Then
MX3 = X3 - 0.001
ElseIf DeltaX2 < 10 Then
MX3 = X3
ElseIf DeltaX2 < 0 And (DeltaX2 + 10) < -10 Then
MX3 = X3 + 0.0015
ElseIf DeltaX2 < 0 And (DeltaX2 + 10) > -10 Then
MX3 = X3 + 0.001
Else
MX3 = X3
End If
End If
End If
End If
End If
End Function
Thứ nhất là chỉ có 1 end if thôi chứ sao lắm end if vậy
Thứ 2 là logic chưa tốt, để tránh else if phức tạo quá thì nên đưa thành nhiều if ... end if
Ví dụ:
If DeltaX2 > 20 Then MX3 = X3 - 0.0015
If DeltaX2 < 20 AND DeltaX2 > 10 Then MX3 = X3 - 0.001

Thứ 3 là tốt nhất bạn nên đưa dữ liệu mầu, và mục đích function là gì , kết quả mẫu
 
Upvote 0
Thứ nhất là chỉ có 1 end if thôi chứ sao lắm end if vậy
Thứ 2 là logic chưa tốt, để tránh else if phức tạo quá thì nên đưa thành nhiều if ... end if
Ví dụ:
If DeltaX2 > 20 Then MX3 = X3 - 0.0015
If DeltaX2 < 20 AND DeltaX2 > 10 Then MX3 = X3 - 0.001

Thứ 3 là tốt nhất bạn nên đưa dữ liệu mầu, và mục đích function là gì , kết quả mẫu
Nếu tách thành nhiều if endif sẽ làm các lệnh kiểm tra chạy nhiều lần dù có thể ngay điều kiện đầu tiên đã đúng. Để elseif hoặc select case hay hơn.
 
Upvote 0
Nếu tách thành nhiều if endif sẽ làm các lệnh kiểm tra chạy nhiều lần dù có thể ngay điều kiện đầu tiên đã đúng. Để elseif hoặc select case hay hơn.
Đúng rồi bạn, mình chỉ đưa ra giải pháp nếu bạn ấy thấy dùng elseif khó khăn quá
 
Upvote 0
Code này sai.
X3 vừa là tham chiếu vừa được khai là biến nội.

Lô gic cũng tùm lum luôn.
Điẻn hình:
If DeltaX2 > 0 And (DeltaX2 - 10) > 10 Then ...
Theo luật bất đẳng thức:
(DeltaX2 - 10) > 10 thì DeltaX2 > 20
Cần quái gì phải xét DeltaX2 > 0
 
Upvote 0
Nhờ các bác giúp chạy Function bên dưới, không hiểu sai chỗ nào mà nó chưa chạy dc? Cảm ơn!

Public Function MX3(X3, DeltaX2) As Double
Dim X3 As Double
Dim DeltaX2 As Double
If DeltaX2 > 0 And (DeltaX2 - 10) > 10 Then
MX3 = X3 - 0.0015
ElseIf (DeltaX2 - 10) < 10 Then
MX3 = X3 - 0.001
ElseIf DeltaX2 < 10 Then
MX3 = X3
ElseIf DeltaX2 < 0 And (DeltaX2 + 10) < -10 Then
MX3 = X3 + 0.0015
ElseIf DeltaX2 < 0 And (DeltaX2 + 10) > -10 Then
MX3 = X3 + 0.001
Else
MX3 = X3
End If
End If
End If
End If
End If
End Function
Nên học hay đọc lại VBA cơ bản - Còn không thì sẽ viết sai hết mà không biết tại sao. Hoặc cách khác là mua phần mềm mà dùng.
 
Upvote 0
Cảm ơn các bác góp ý! Nhưng mình muốn xét DeltaX2 là số âm hay số dương trước tiên, nếu là số dương thì tiếp đến xét "độ lớn" nên mới có (DeltaX2-10).....
 
Upvote 0
Cảm ơn các bác góp ý! Nhưng mình muốn xét DeltaX2 là số âm hay số dương trước tiên, nếu là số dương thì tiếp đến xét "độ lớn" nên mới có (DeltaX2-10).....
Nếu vậy thì khoan học VBA, hãy học lại căn bản toán đã.
Thay vì so sánh thẳng với 20, nhất định phải bỏ công làm thêm 1 con toán trừ 10 rồi mới đem hiệu số so sánh với 10?
 
Upvote 0
Web KT

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

Back
Top Bottom