Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2010, 20:09   #1
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию Как к условию, добавить еще условие

Есть у меня, такое выражение:
Код:
Select Case sh.Index
        Case 1 To 7
If sh.Index = 1 Then Cells(dat * 44 + 38, 8) = 42
Нужно еще, добавить условие, что если в sh.Index = 1, [h37] = 1200, то [h39] = 50, если [h37] = 1300, то [h39] = 55, если [h37] = 1400, то [h39] = 60, если [h37] = 1500, то [h39] = 65, если [h37] = 1600, то [h39] = 70, если [h37] = 1700, то [h39] = 75....
т. е. за каждую сотню в [h37], добавлятся пятерка в [h39], но, если в [h37] число будет меньше 1200, то [h39] = 45

Данные в [h37], вводятся в ручную.
За ранее, благодарен.
valerij вне форума Ответить с цитированием
Старый 22.10.2010, 20:20   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Примерно так:
Код:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Select Case Sh.Index
        Case 1 To 7
If Sh.Index = 1 Then
Cells(dat * 44 + 38, 8) = 42
    If [h37] = 1200 Then [h39] = 50
    If [h37] = 1300 Then [h39] = 55
End If

End Select


End Sub
Можно и цикл сделать, а не писать все эти условия отдельно
motorway вне форума Ответить с цитированием
Старый 22.10.2010, 20:25   #3
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от motorway Посмотреть сообщение
Примерно так
Но тогда я должен дать конечное число для Н37, а какое оно будети, я не знаю.
Хотелось бы, что бы автоматом макрос понимал, что за каждую сотню + пятерка, нач. число 1200
А-а понял!!!
Конечное число для цикла и будет в Н37

Последний раз редактировалось valerij; 22.10.2010 в 20:36.
valerij вне форума Ответить с цитированием
Старый 22.10.2010, 20:39   #4
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Код:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Select Case Sh.Index
        Case 1 To 7
If Sh.Index = 1 Then
Cells(dat * 44 + 38, 8) = 42
If [h37] < 1200 Then
[h39] = 45
Else
    ost = [h37].Value Mod 100
    If [h37].Value <> "" And ost = 0 Then [h39] = 50 + ([h37] - 1200) / 20
End If
End If


End Select


End Sub
Вот так. При этом если число не делится на 100, то тоже можно что-то предпринять, если нужно
motorway вне форума Ответить с цитированием
Старый 22.10.2010, 20:50   #5
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от motorway Посмотреть сообщение
если нужно
Да, вот такие, условия, извиняюсь!!!!!!!!!!
Код:
If sh.Index = 1 Then
Cells(dat * 44 + 38, 8) = 42
    If [h37] < 1200 Then [h39] = 45
    If [h37] > 1200 < 1300 Then [h39] = 50
    If [h37] > 1300 < 1400 Then [h39] = 55
    If [h37] > 1400 < 1500 Then [h39] = 60
    If [h37] > 1500 < 1600 Then [h39] = 65
    If [h37] > 1600 < 1700 Then [h39] = 70
    If [h37] > 1700 < 1800 Then [h39] = 75
    If [h37] > 1800 < 1900 Then [h39] = 80
    If [h37] > 1900 < 2000 Then [h39] = 85
    If [h37] > 2000 < 2100 Then [h39] = 90
    If [h37] > 2100 < 2200 Then [h39] = 95
    If [h37] > 2200 < 2300 Then [h39] = 100
End If: MsgBox [h39]
Но не пойму, почему в Н39 = 100, какое бы число, не ввел в Н37
valerij вне форума Ответить с цитированием
Старый 22.10.2010, 21:36   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

If [h37] > 2200 < 2300 Then [h39] = 100
сначала проверяется [h37] > 2200, результат будет False или True, но это не важно...
потому что потом проверяется условие False или True < 2300 - а это всегда True, поэтому всегда [h39] = 100.
Как написано - так и работает.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.10.2010, 21:47   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Я бы так написал - ведь после первого совпадения следующие не проверяются. И быстрее, и легче, и писать меньше:

Код:
    If sh.Index = 1 Then
        Cells(dat * 44 + 38, 8) = 42
        Select Case [h37].Value
        Case Is < 1200: [h39] = 45
        Case Is < 1300: [h39] = 50
        Case Is < 1400: [h39] = 55
        Case Is < 1500: [h39] = 60
        Case Is < 1600: [h39] = 65
        Case Is < 1700: [h39] = 70
        Case Is < 1800: [h39] = 75
        Case Is < 1900: [h39] = 80
        Case Is < 2000: [h39] = 85
        Case Is < 2100: [h39] = 90
        Case Is < 2200: [h39] = 95
        Case Is < 2300: [h39] = 100
        End Select
    End If: MsgBox [h39]
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 22.10.2010, 21:55   #8
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
True < 2300 - а это всегда True, поэтому всегда [h39] = 100..
Игорь, точно!!!, понял.
Цитата:
Я бы так написал
Попробую, макрос motorway, правильно работает
valerij вне форума Ответить с цитированием
Старый 22.10.2010, 21:59   #9
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Или так покороче:
Код:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Select Case Sh.Index
        Case 1 To 7
If Sh.Index = 1 Then
Cells(dat * 44 + 38, 8) = 42
If [h37] < 1200 Then
[h39] = 45
Else
    [h39] = 50 + (Int([h37] / 100) * 100 - 1200) / 20
End If
End If
End Select
End Sub
motorway вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как добавить в Select Case, еще один индекс valerij Microsoft Office Excel 3 23.02.2010 10:42
Добавить условие в макрос Pilot Microsoft Office Excel 8 20.02.2010 17:35
Одно поле StringField в DataView в Rave. Как добавить еще? Leser Помощь студентам 1 06.10.2008 15:00
Что еще добавить в слежку к компу?? и один нюанс Cj_ Софт 9 15.07.2008 06:57