Как получить результат расчета прямо в IF-THEN-ELSE? - PullRequest
0 голосов
/ 31 марта 2019

Я написал этот VBA-скрипт для выполнения сложных вычислений, но результат всегда равен 0. Я описал реальные ответы в коде. Почему это не работает?

Выход для кода

enter image description here

Private Sub Button1_Click()
    Dim city_name As String, deal_type As String, cft As Integer, discount_percentage As Integer, city_check As Integer, cft_check As Integer, deal_check As Integer, discount_check As Integer, weekday_bookingfee As Double, weekend_bookingfee As Double
    discount_percentage = Range("b4").Value
    city_name = Range("b5").Text
    deal_type = Range("b6").Text
    cft = Range("b7").Value
    If city_name = "Delhi" Then
    city_check = 1
    ElseIf city_name = "Mumbai" Then
    city_check = 1
    ElseIf city_name = "Bangalore" Then
    city_check = 1
    ElseIf city_name = "Chennai" Then
    city_check = 3
    ElseIf city_name = "Kolkata" Then
    city_check = 3
    ElseIf city_name = "Hyderabad" Then
    city_check = 2
    ElseIf city_name = "Pune" Then
    city_check = 3
    ElseIf city_name = "Ahmedabad" Then
    city_check = 4
    ElseIf city_name = "Chandigarh" Then
    city_check = 4
    ElseIf city_name = "Jaipur" Then
    city_check = 4
    ElseIf city_name = "Goa" Then
    city_check = 4
    Else:
    End If
    If deal_type = "Food" Then
    deal_check = 2
    ElseIf deal_type = "Total" Then
    deal_check = 1
    ElseIf deal_type = "Buffet" Then
    deal_check = 1
    ElseIf deal_type = "Alcohol" Then
    deal_check = 3
    ElseIf deal_type = "Coupon" Then
    deal_check = 4
    ElseIf deal_type = "Explosive" Then
    deal_check = 4
    Else:
    End If
    If cft >= 5000 Then
    cft_check = 1
    ElseIf cft < 5000 And cft >= 2500 Then
    cft_check = 2
    ElseIf cft < 2500 And cft >= 1500 Then
    cft_check = 3
    ElseIf cft < 1500 And cft >= 800 Then
    cft_check = 4
    ElseIf cft < 800 And cft >= 500 Then
    cft_check = 5
    ElseIf cft < 500 Then
    cft_check = 6
    Else:
    End If
    If (discount_percentage = 50) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 3) Then
    weekend_bookingfee = 80 And weekday_bookingfee = 60
    ElseIf (discount_percentage = 50) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 4) Then
    weekend_bookingfee = 70 And weekday_bookingfee = 60
    ElseIf (discount_percentage = 50) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 5) Then
    weekend_bookingfee = 50 And weekday_bookingfee = 40
    ElseIf (discount_percentage = 50) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 6) Then
    weekend_bookingfee = 50 And weekday_bookingfee = 40
    ElseIf (discount_percentage = 50) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 7) Then
    weekend_bookingfee = 35 And weekday_bookingfee = 30
    ElseIf (discount_percentage = 50) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 8) Then
    weekend_bookingfee = 30 And weekday_bookingfee = 25
    ElseIf (discount_percentage = 50) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 9) Then
    weekend_bookingfee = 25 And weekday_bookingfee = 20
    ElseIf (discount_percentage = 50) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 10) Then
    weekend_bookingfee = 20 And weekday_bookingfee = 15
    ElseIf (discount_percentage = 50) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 11) Then
    weekend_bookingfee = 20 And weekday_bookingfee = 15
    ElseIf (discount_percentage = 50) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 12) Then
    weekend_bookingfee = 15 And weekday_bookingfee = 10
    ElseIf (discount_percentage = 50) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 13) Then
    weekend_bookingfee = 15 And weekday_bookingfee = 10
    ElseIf (discount_percentage = 50) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 14) Then
    weekend_bookingfee = 5 And weekday_bookingfee = 5
    Else:
    End If
    If (discount_percentage = 40) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 3) Then
    weekend_bookingfee = (80 * 0.75) And weekday_bookingfee = (60 * 0.75)
    ElseIf (discount_percentage = 40) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 4) Then
    weekend_bookingfee = (70 * 0.75) And weekday_bookingfee = (60 * 0.75)
    ElseIf (discount_percentage = 40) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 5) Then
    weekend_bookingfee = (50 * 0.75) And weekday_bookingfee = (40 * 0.75)
    ElseIf (discount_percentage = 40) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 6) Then
    weekend_bookingfee = (50 * 0.75) And weekday_bookingfee = (40 * 0.75)
    ElseIf (discount_percentage = 40) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 7) Then
    weekend_bookingfee = (35 * 0.75) And weekday_bookingfee = (30 * 0.75)
    ElseIf (discount_percentage = 40) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 8) Then
    weekend_bookingfee = (30 * 0.75) And weekday_bookingfee = (25 * 0.75)
    ElseIf (discount_percentage = 40) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 9) Then
    weekend_bookingfee = (25 * 0.75) And weekday_bookingfee = (20 * 0.75)
    ElseIf (discount_percentage = 40) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 10) Then
    weekend_bookingfee = (20 * 0.75) And weekday_bookingfee = (15 * 0.75)
    ElseIf (discount_percentage = 40) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 11) Then
    weekend_bookingfee = (20 * 0.75) And weekday_bookingfee = (15 * 0.75)
    ElseIf (discount_percentage = 40) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 12) Then
    weekend_bookingfee = (15 * 0.75) And weekday_bookingfee = (10 * 0.75)
    ElseIf (discount_percentage = 40) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 13) Then
    weekend_bookingfee = (15 * 0.75) And weekday_bookingfee = (10 * 0.75)
    ElseIf (discount_percentage = 40) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 14) Then
    weekend_bookingfee = (5 * 0.75) And weekday_bookingfee = (5 * 0.75)
    Else:
    End If
    If (discount_percentage = 30 Or discount_percentage = 20) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 3) Then
    weekend_bookingfee = (80 * 0.5) And weekday_bookingfee = (60 * 0.5)
    ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 4) Then
    weekend_bookingfee = (70 * 0.5) And weekday_bookingfee = (60 * 0.5)
    ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 5) Then
    weekend_bookingfee = (50 * 0.5) And weekday_bookingfee = (40 * 0.5)
    ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 6) Then
    weekend_bookingfee = (50 * 0.5) And weekday_bookingfee = (40 * 0.5)
    ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 7) Then
    weekend_bookingfee = (35 * 0.5) And weekday_bookingfee = (30 * 0.5)
    ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 8) Then
    weekend_bookingfee = (30 * 0.5) And weekday_bookingfee = (25 * 0.5)
    ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 9) Then
    weekend_bookingfee = (25 * 0.5) And weekday_bookingfee = (20 * 0.5)
    ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 10) Then
    weekend_bookingfee = (20 * 0.5) And weekday_bookingfee = (15 * 0.5)
    ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 11) Then
    weekend_bookingfee = (20 * 0.5) And weekday_bookingfee = (15 * 0.5)
    ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 12) Then
    weekend_bookingfee = (15 * 0.5) And weekday_bookingfee = (10 * 0.5)
    ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 13) Then
    weekend_bookingfee = (15 * 0.5) And weekday_bookingfee = (10 * 0.5)
    ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (WorksheetFunction.Sum(city_check, deal_check, cft_check) = 14) Then
    weekend_bookingfee = (5 * 0.5) And weekday_bookingfee = (5 * 0.5)
    Else:
    End If
    Range("b10").Value = weekday_bookingfee
    Range("b11").Value = weekend_bookingfee
 End Sub

Мне нужны фактические сборы за неделю и на выходные, как я описал в коде

Ответы [ 3 ]

1 голос
/ 01 апреля 2019

Используя несколько массивов, вы можете полностью избавиться от всей этой If ElseIf гадости в конце и уменьшить ее до 2 строк кода. Мы знаем адрес элементов массива, поэтому мы используем простую математику в двух нижних строках кода, чтобы определить, какой элемент нам следует использовать.

Private Sub Button1_Click()
Dim city_name As String, deal_type As String, cft As Long, discount_percentage As Long, city_check As Long, cft_check As Long, deal_check As Long, discount_check As Long, weekday_bookingfee As Double, weekend_bookingfee As Double, Disc_arr As Variant, Weekend_arr As Variant, Weekday_arr As Variant
Dim resultCalc
Disc_arr = Array(, , 0.5, 0.5, 0.75, 1)
Weekend_arr = Array(, , , 80, 70, 50, 50, 35, 30, 25, 20, 20, 15, 15, 5)
Weekday_arr = Array(, , , 60, 60, 40, 40, 30, 25, 20, 15, 15, 10, 10, 5)
discount_percentage = Range("b4").Value
city_name = Range("b5").Text
deal_type = Range("b6").Text
cft = Range("b7").Value

Select Case city_name
    Case "Delhi", "Mumbai", "Bangalore"
        city_check = 1
    Case "Hyderabad"
        city_check = 2
    Case "Chennai", "Kolkata", "Pune"
        city_check = 3
    Case "Ahmedabad", "Chandigarh", "Jaipur", "Goa"
        city_check = 4
End Select

Select Case deal_type
    Case "Total", "Buffet"
        deal_check = 1
    Case "Food"
        deal_check = 2
    Case "Alcohol"
        deal_check = 3
    Case "Coupon", "Explosive"
        deal_check = 4
End Select

If cft >= 5000 Then
    cft_check = 1
ElseIf cft < 5000 And cft >= 2500 Then
    cft_check = 2
ElseIf cft < 2500 And cft >= 1500 Then
    cft_check = 3
ElseIf cft < 1500 And cft >= 800 Then
    cft_check = 4
ElseIf cft < 800 And cft >= 500 Then
    cft_check = 5
ElseIf cft < 500 Then
    cft_check = 6
End If

resultCalc = WorksheetFunction.Sum(city_check, deal_check, cft_check)

weekend_bookingfee = CDbl(Weekend_arr(resultCalc)) * CDbl(Disc_arr(discount_percentage / 10))
weekday_bookingfee = CDbl(Weekday_arr(resultCalc)) * CDbl(Disc_arr(discount_percentage / 10))

End Sub

Также измените все ваши объявления Integer на Long, мы не используем Integer в VBA.

1 голос
/ 31 марта 2019

Кодовая строка

weekend_bookingfee = 35 And weekday_bookingfee = 30

Не оценивает два разных оператора, так как это «И» вместо этого объединяет логическое выражение

Измените все свои:

Then
weekend_bookingfee = ... And weekday_bookingfee = ...

Кому:

Then
weekend_bookingfee = .... : weekday_bookingfee = ...

Где «:» фактически разделяет два разных утверждения

0 голосов
/ 01 апреля 2019
Private Sub Button1_Click()

Dim city_name As String, deal_type As String, cft As Integer, discount_percentage As Integer, city_check As Integer, cft_check As Integer, deal_check As Integer, discount_check As Integer, weekday_bookingfee As Double, weekend_bookingfee As Double
Dim resultCalc
discount_percentage = Range("b4").Value
city_name = Range("b5").Text
deal_type = Range("b6").Text
cft = Range("b7").Value




Select Case city_name
    Case "Delhi", "Mumbai", "Bangalore"
        city_check = 1
    Case "Hyderabad"
        city_check = 2
    Case "Chennai", "Kolkata", "Pune"
        city_check = 3
    Case "Ahmedabad", "Chandigarh", "Jaipur", "Goa"
        city_check = 4
End Select

Select Case deal_type
    Case "Total", "Buffet"
        deal_check = 1
    Case "Food"
        deal_check = 2
    Case "Alcohol"
        deal_check = 3
    Case "Coupon", "Explosive"
        deal_check = 4
End Select


If cft >= 5000 Then
    cft_check = 1
ElseIf cft < 5000 And cft >= 2500 Then
    cft_check = 2
ElseIf cft < 2500 And cft >= 1500 Then
    cft_check = 3
ElseIf cft < 1500 And cft >= 800 Then
    cft_check = 4
ElseIf cft < 800 And cft >= 500 Then
    cft_check = 5
ElseIf cft < 500 Then
    cft_check = 6
End If


resultCalc = WorksheetFunction.Sum(city_check, deal_check, cft_check)

If (discount_percentage = 50) And (resultCalc = 3) Then
weekend_book ingfee = 80 And weekday_bookingfee = 60
ElseIf (discount_percentage = 50) And (resultCalc = 4) Then
    weekend_bookingfee = 70 And weekday_bookingfee = 60
ElseIf (discount_percentage = 50) And (resultCalc = 5) Then
    weekend_bookingfee = 50 And weekday_bookingfee = 40
ElseIf (discount_percentage = 50) And (resultCalc = 6) Then
    weekend_bookingfee = 50 And weekday_bookingfee = 40
ElseIf (discount_percentage = 50) And (resultCalc = 7) Then
    weekend_bookingfee = 35 And weekday_bookingfee = 30
ElseIf (discount_percentage = 50) And (resultCalc = 8) Then
    weekend_bookingfee = 30 And weekday_bookingfee = 25
ElseIf (discount_percentage = 50) And (resultCalc = 9) Then
    weekend_bookingfee = 25 And weekday_bookingfee = 20
ElseIf (discount_percentage = 50) And (resultCalc = 10) Then
    weekend_bookingfee = 20 And weekday_bookingfee = 15
ElseIf (discount_percentage = 50) And (resultCalc = 11) Then
    weekend_bookingfee = 20 And weekday_bookingfee = 15
ElseIf (discount_percentage = 50) And (resultCalc = 12) Then
    weekend_bookingfee = 15 And weekday_bookingfee = 10
ElseIf (discount_percentage = 50) And (resultCalc = 13) Then
    weekend_bookingfee = 15 And weekday_bookingfee = 10
ElseIf (discount_percentage = 50) And (resultCalc = 14) Then
    weekend_bookingfee = 5 And weekday_bookingfee = 5
End If

If (discount_percentage = 40) And (resultCalc = 3) Then
    weekend_bookingfee = (80 * 0.75) And weekday_bookingfee = (60 * 0.75)
ElseIf (discount_percentage = 40) And (resultCalc = 4) Then
    weekend_bookingfee = (70 * 0.75) And weekday_bookingfee = (60 * 0.75)
ElseIf (discount_percentage = 40) And (resultCalc = 5) Then
    weekend_bookingfee = (50 * 0.75) And weekday_bookingfee = (40 * 0.75)
ElseIf (discount_percentage = 40) And (resultCalc = 6) Then
    weekend_bookingfee = (50 * 0.75) And weekday_bookingfee = (40 * 0.75)
ElseIf (discount_percentage = 40) And (resultCalc = 7) Then
    weekend_bookingfee = (35 * 0.75) And weekday_bookingfee = (30 * 0.75)
ElseIf (discount_percentage = 40) And (resultCalc = 8) Then
    weekend_bookingfee = (30 * 0.75) And weekday_bookingfee = (25 * 0.75)
ElseIf (discount_percentage = 40) And (resultCalc = 9) Then
    weekend_bookingfee = (25 * 0.75) And weekday_bookingfee = (20 * 0.75)
ElseIf (discount_percentage = 40) And (resultCalc = 10) Then
    weekend_bookingfee = (20 * 0.75) And weekday_bookingfee = (15 * 0.75)
ElseIf (discount_percentage = 40) And (resultCalc = 11) Then
    weekend_bookingfee = (20 * 0.75) And weekday_bookingfee = (15 * 0.75)
ElseIf (discount_percentage = 40) And (resultCalc = 12) Then
    weekend_bookingfee = (15 * 0.75) And weekday_bookingfee = (10 * 0.75)
ElseIf (discount_percentage = 40) And (resultCalc = 13) Then
    weekend_bookingfee = (15 * 0.75) And weekday_bookingfee = (10 * 0.75)
ElseIf (discount_percentage = 40) And (resultCalc = 14) Then
    weekend_bookingfee = (5 * 0.75) And weekday_bookingfee = (5 * 0.75)
End If

If (discount_percentage = 30 Or discount_percentage = 20) And (resultCalc = 3) Then
    weekend_bookingfee = (80 * 0.5) And weekday_bookingfee = (60 * 0.5)
ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (resultCalc = 4) Then
    weekend_bookingfee = (70 * 0.5) And weekday_bookingfee = (60 * 0.5)
ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (resultCalc = 5) Then
    weekend_bookingfee = (50 * 0.5) And weekday_bookingfee = (40 * 0.5)
ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (resultCalc = 6) Then
    weekend_bookingfee = (50 * 0.5) And weekday_bookingfee = (40 * 0.5)
ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (resultCalc = 7) Then
    weekend_bookingfee = (35 * 0.5) And weekday_bookingfee = (30 * 0.5)
ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (resultCalc = 8) Then
    weekend_bookingfee = (30 * 0.5) And weekday_bookingfee = (25 * 0.5)
ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (resultCalc = 9) Then
    weekend_bookingfee = (25 * 0.5) And weekday_bookingfee = (20 * 0.5)
ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (resultCalc = 10) Then
    weekend_bookingfee = (20 * 0.5) And weekday_bookingfee = (15 * 0.5)
ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (resultCalc = 11) Then
    weekend_bookingfee = (20 * 0.5) And weekday_bookingfee = (15 * 0.5)
ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (resultCalc = 12) Then
    weekend_bookingfee = (15 * 0.5) And weekday_bookingfee = (10 * 0.5)
ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (resultCalc = 13) Then
    weekend_bookingfee = (15 * 0.5) And weekday_bookingfee = (10 * 0.5)
ElseIf (discount_percentage = 30 Or discount_percentage = 20) And (resultCalc = 14) Then
    weekend_bookingfee = (5 * 0.5) And weekday_bookingfee = (5 * 0.5)
End If


End
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...