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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2011, 01:44   #31
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

потому что твой Target с 13-й строкой не пересекается.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 16.07.2011, 01:52   #32
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
потому что твой Target с 13-й строкой не пересекается.
А зачем, тогда ты так сделал?
Ну, ладно, я все таки упростил, глядя на твой пример, через условия
Код:
If x.Row = 11 Then m = 11: база_влага = 14.5
If x.Row = 13 Then m = 13: база_влага = 14
If Intersect(Target, Range(Cells(m, 3), Cells(m, 9))) Is Nothing Then Exit For
If Cells(m, 3) > 14 And Cells(m, 3) < 15.1 Then всего = 17.14
If Cells(m, 3) > 15 And Cells(m, 3) < 15.6 Then всего = 21.53
If Cells(m, 3) > 15.5 And Cells(m, 3) < 16.1 Then всего = 23.92
If Cells(m, 3) > 16 And Cells(m, 3) < 16.6 Then всего = 26.31
If Cells(m, 3) > 16.5 And Cells(m, 3) < 17.1 Then всего = 29.9
If Cells(m, 3) > 17 And Cells(m, 3) < 17.6 Then всего = 32.69
If Cells(m, 3) > 17.5 And Cells(m, 3) < 18.1 Then всего = 35.88
If Cells(m, 2) = 0 Then сор = 0
        Cells(x.Row, 6) = (Cells(x.Row, 3) - база_влага) * всего
            Cells(x.Row, 7) = (Cells(x.Row, 4) - база_сор) * сор
        Cells(x.Row, 9) = Cells(x.Row, 2) - Cells(x.Row, 6) - Cells(x.Row, 7)

Последний раз редактировалось valerij; 16.07.2011 в 02:02.
valerij вне форума Ответить с цитированием
Старый 16.07.2011, 02:33   #33
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Не люблю If...And...
Мне кажется, лучше (и быстрее) так:

Код:
'If [c11] > 14 And [c11] < 15.1 Then всего = 17.14
'If [c11] > 15 And [c11] < 15.6 Then всего = 21.53
'If [c11] > 15.5 And [c11] < 16.1 Then всего = 23.92
'If [c11] > 16 And [c11] < 16.6 Then всего = 26.31
'If [c11] > 16.5 And [c11] < 17.1 Then всего = 29.9
'If [c11] > 17 And [c11] < 17.6 Then всего = 32.69
'If [c11] > 17.5 And [c11] < 18.1 Then всего = 35.88

Select Case [c11].Value
Case 14.000001 To 15: всего = 17.14
Case 15.000001 To 15.5: всего = 21.53
Case 15.5000001 To 16: всего = 23.92
Case 16.0000001 To 16.5: всего = 26.31
Case 16.5000001 To 17: всего = 29.9
Case 17.0000001 To 17.5: всего = 32.69
Case 17.5000001 To 18: всего = 35.88
End Select
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 16.07.2011, 05:04   #34
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
With [B11:i11] 
    If Not Intersect(Target, .Cells) Is Nothing Then
MsgBox 11
If [c11] > 14 And [c11] < 15.1 Then всего = 17.14
If [c11] > 15 And [c11] < 15.6 Then всего = 21.53
If [c11] > 15.5 And [c11] < 16.1 Then всего = 23.92
If [c11] > 16 And [c11] < 16.6 Then всего = 26.31
If [c11] > 16.5 And [c11] < 17.1 Then всего = 29.9
If [c11] > 17 And [c11] < 17.6 Then всего = 32.69
If [c11] > 17.5 And [c11] < 18.1 Then всего = 35.88
If [b11] = 0 Then сор = 0
    End If
End With

With [B13:i13]
    If Not Intersect(Target, .Cells) Is Nothing Then
MsgBox 13
If [c13] > 14 And [c13] < 15.1 Then всего = 17.14
If [c13] > 15 And [c13] < 15.6 Then всего = 21.53
If [c13] > 15.5 And [c13] < 16.1 Then всего = 23.92
If [c13] > 16 And [c13] < 16.6 Then всего = 26.31
If [c13] > 16.5 And [c13] < 17.1 Then всего = 29.9
If [c13] > 17 And [c13] < 17.6 Then всего = 32.69
If [c13] > 17.5 And [c13] < 18.1 Then всего = 35.88
If [b13] = 0 Then сор = 0
    End If
End With
а что ты тут увидишь 13?
Цитата:
А зачем, тогда ты так сделал?
я написал код, который должен делать то же самое, что и твой. а зачем ты его именно так сделал я не имею ни малейшего представления.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 16.07.2011, 09:49   #35
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Не люблю If...And...
Мне кажется, лучше (и быстрее) так:
Вечером, обязательно попробую.
Цитата:
Сообщение от IgorGO Посмотреть сообщение
[я написал код, который должен делать то же самое, что и твой..
Игорь!
В том, то и дело, что не работает, #30, писал, пробовал от дельно, ты наверное не видел.
valerij вне форума Ответить с цитированием
Старый 16.07.2011, 11:06   #36
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

я не знаю как должно работать (никто не обьяснял) я упростил, но чтобы работало аналогично исходному коду.

а Hugo121 - то же Игорь. Можешь обращаться к нам по никам (для ясности) раз уж мы встряли в эту тему
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 16.07.2011 в 11:09.
IgorGO вне форума Ответить с цитированием
Старый 16.07.2011, 12:18   #37
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
я не знаю как должно работать
IgorGO!
У меня
Код:
With [B11:i11] 
    If Not Intersect(Target, .Cells) Is Nothing Then
Когда я нахожусь в этой строке, примеру:
[F11] = 3 * всего(всего = в зависимости ввода в [c11])

Ни какие другие строки не делают вычислений, в частности 13 -я

Когда я перехожу в
Код:
With [B13:i13]
    If Not Intersect(Target, .Cells) Is Nothing Then
и выполняю
[F13] = 3 * всего(всего = в зависимости ввода в [c13])

Ни какие другие строки не делают вычислений, в частности 11 -я

В прищепке, готовая рабочая, чисто для понимания, мне не надо, что ВЫ, писали за меня код, не эта цель, я знаю, что, ВЫ, просто укажите, как мона проще.
Пример от Hugo121
valerij вне форума Ответить с цитированием
Старый 16.07.2011, 12:48   #38
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Валера, если Target - это одна ячейка, то никогда не выполнятся обе эти части (не может одна яейка принадлежать одновременно и 11 и 13-му ряду!!!).

With [B11:i11]
If Not Intersect(Target, .Cells) Is Nothing Then
...

With [B13:i13]
If Not Intersect(Target, .Cells) Is Nothing Then
...

При написании кода рекомендую включать не только фантазию но еще и логику.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 16.07.2011, 12:56   #39
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Валера, если Target - это одна ячейка, то никогда не выполнятся обе эти части .
IgorGO
Конечно, я это знаю
Если я закомментирую одну из With у меня вычисления в строке, выполняется там, где я не работаю, поэтому я и ввел With по диапазонам.
Hugo121!!
Попробовал, все ОК

Последний раз редактировалось valerij; 16.07.2011 в 13:56.
valerij вне форума Ответить с цитированием
Старый 16.07.2011, 16:16   #40
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Все сделал, сократил май же > половины, без всяких If Intersect(Target,, всего лишь два, GoTo, все четко работает.
Код:
Application.EnableEvents = False
            For Each x In Target
                If x.Row < 3 Or x.Row > 13 Then Exit Sub
                    If x.Row = 3 Or x.Row = 11 Then база_влага = 14.5  'ячмень
                    If x.Row = 5 Or x.Row = 13 Then база_влага = 14  'пшеницаь
                If x.Row = 11 Or x.Row = 13 Then
            Select Case Cells(x.Row, 3).Value
                Case 14.000001 To 15: Cells(x.Row, 6) = 17.14
                Case 15.000001 To 15.5: Cells(x.Row, 6) = 21.53
                Case 15.5000001 To 16: Cells(x.Row, 6) = 23.92
                Case 16.0000001 To 16.5: Cells(x.Row, 6) = 26.31
                Case 16.5000001 To 17: Cells(x.Row, 6) = 29.9
                Case 17.0000001 To 17.5: Cells(x.Row, 6) = 32.69
                Case 17.5000001 To 18: Cells(x.Row, 6) = 35.88
            End Select
        Cells(x.Row, 7) = сор * (Cells(x.Row, 4) - база_сор)
            Cells(x.Row, 9) = Cells(x.Row, 2) - (Cells(x.Row, 2) * (Cells(x.Row, 3) - _
        база_влага + Cells(x.Row, 4) - база_сор)) / 100 - Cells(x.Row, 6) - Cells(x.Row, 7)
                Else
        Cells(x.Row, 6) = (Cells(x.Row, 3) - база_влага) * снятие_влага
            Cells(x.Row, 7) = (Cells(x.Row, 4) - база_сор) * снятие_сор
            Cells(x.Row, 9) = Cells(x.Row, 2) * (1 - (Cells(x.Row, 6) + _
        Cells(x.Row, 7)) / 100)
                End If
            Next
Application.EnableEvents = True
Теперь без GoTo

Игори, Спасибо.

Последний раз редактировалось valerij; 16.07.2011 в 21:52.
valerij вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите упростить простой макрос frantic150 Microsoft Office Excel 2 23.06.2009 04:55
проверьте плз код!можно ли его оптимизировать или упростить? -ushёl- Помощь студентам 10 23.04.2009 21:07
Вот! Тот макрос, который заставил обратится меня на этот форум! Дмитрий Фукс Microsoft Office Excel 6 10.04.2009 10:29
Запереть макрос можно? zander Microsoft Office Excel 1 15.02.2009 15:40