Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Нужена помощь по доработке макроса. Добавлено: 20.11.08 16:59  

Автор вопроса:  Alexey | ICQ: 148854696 
прошу сразу не бить ногами. И не зафлуживать тему.
Есть реальная проблема, которую нужно решить.

Function track(y, z, q, s)

If s = 1 And y > 1 And y < 29 And z > 1 And z < 29 Then
track = 1.5
End If
If q > 2.5 Then
track = 2.5
End If
If q < 2.5 Then
track = 1.5
End If

If s > 1 And y > 1 And y < 21 And z > 1 And z < 21 Then
track = 1.5
End If
If q > 2.5 Then
track = 2.5
End If
If q < 2.5 Then
track = 1.5
End If



If s = 1 And y > 29 And y < 40 And z > 29 And z < 40 Then
track = 2.5
End If
If q > 2.5 Then
track = 4
End If
If q < 2.5 Then
track = 2.5
End If

If s > 1 And y > 21 And y < 33 And z > 21 And z < 33 Then
track = 2.5
End If
If q > 2.5 Then
track = 4
End If
If q < 2.5 Then
track = 2.5
End If


If s = 1 And y > 40 And y < 53 And z > 40 And z < 53 Then
track = 4
End If
If q > 2.5 Then
track = 6
End If
If q < 2.5 Then
track = 4
End If

If s > 1 And y > 33 And y < 44 And z > 33 And z < 44 Then
track = 4
End If
If q > 2.5 Then
track = 6
End If
If q < 2.5 Then
track = 4
End If


If s = 1 And y > 53 And y < 67 And z > 53 And z < 67 Then
track = 6
End If
If q > 2.5 Then
track = 10
End If
If q < 2.5 Then
track = 6
End If

If s > 1 And y > 44 And y < 56 And z > 44 And z < 56 Then
track = 6
End If
If q > 2.5 Then
track = 10
End If
If q < 2.5 Then
track = 6
End If


If s = 1 And y > 67 And y < 91 And z > 67 And z < 91 Then
track = 10
End If
If q > 2.5 Then
track = 16
End If
If q < 2.5 Then
track = 10
End If

If s > 1 And y > 56 And y < 76 And z > 10 And z < 76 Then
track = 10
End If
If q > 2.5 Then
track = 16
End If
If q < 2.5 Then
track = 10
End If


If s = 1 And y > 91 And y < 121 And z > 91 And z < 121 Then
track = 16
End If
If q > 2.5 Then
track = 25
End If
If q < 2.5 Then
track = 16
End If

If s > 1 And y > 76 And y < 87 And z > 76 And z < 87 Then
track = 16
End If
If q > 2.5 Then
track = 25
End If
If q < 2.5 Then
track = 16
End If


If s = 1 And y > 121 And y < 160 And z > 121 And z < 160 Then
track = 25
End If
If q > 2.5 Then
track = 35
End If
If q < 2.5 Then
track = 25
End If

If s > 1 And y > 87 And y < 115 And z > 87 And z < 115 Then
track = 25
End If
If q > 2.5 Then
track = 35
End If
If q < 2.5 Then
track = 25
End If

End Function


Вот макрос, который работает, но проблема в том, что при соблюдении всех условий в ячейках y, z, q, s он продолжает работать до последнего значения. В данном случае это 25.
Как это исправмть? по идее, должно быть так, что если

If s = 1 And y > 1 And y < 29 And z > 1 And z < 29 Then
track = 1.5
End If
If q > 2.5 Then
track = 2.5
End If
If q < 2.5 Then
track = 1.5
End If

все условия соблюдаются из первой строки, то и значение должно вернуться 1.5
Кто нить, помогите разобраться. Может есть идеи как исправить этот макрос и сделаю его более компактным, но при этом код оставить открытым, что бы можно было вносить дополнения.

Ответить

  Ответы Всего ответов: 3  

Номер ответа: 1
Автор ответа:
 Nytrogen



Вопросов: 18
Ответов: 186
 Профиль | | #1 Добавлено: 20.11.08 17:30
Уужос, Вы-то сами помните, за что отвечает каждый кусок?
Если y, z, q, s - это ячейки, то извините, надо тогда уж их значение переводить в число:
  1. If CInt(s.Value) = 1 And CInt(y.Value) > 1 And CInt(y.Value) < 29 And CInt(z.Value) > 1 And CInt(z.Value) < 29 Then

Ответить

Номер ответа: 2
Автор ответа:
 Alexey



ICQ: 148854696 

Вопросов: 2
Ответов: 1
 Профиль | | #2 Добавлено: 20.11.08 17:46
ну возможно я не так выразился y, z, q, s это переменные. они уже имеют свое значение. y>1 но <40, данное условие не является постоянным и меняется дискретно с определенным шагом.

Ответить

Номер ответа: 3
Автор ответа:
 AxeL



ICQ: 264730390 

Вопросов: 2
Ответов: 106
 Профиль | | #3 Добавлено: 21.11.08 04:06
Упрости все:
Вот это:

  1. If s = 1 And y > 1 And y < 29 And z > 1 And z < 29 Then
  2. track = 1.5
  3. End If
  4. If q > 2.5 Then
  5. track = 2.5
  6. End If
  7. If q < 2.5 Then
  8. track = 1.5
  9. End If


упрощается до этого:

  1. If s = 1 And y > 1 And y < 29 And z > 1 And z < 29 Then
  2.  
  3.     If q > 2.5 Then
  4.         track = 2.5
  5.     ElseIf q < 2.5 Then
  6.         track = 1.5
  7.     End If
  8. Exit Function ' выходим, если дальнейшая обработка скрипта уже не нужна  
  9. End If

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам