Страницы: 1
RSS
Оператор IF в VBA.
 
Как проверить вместимость диапазона ячеек и дать ответ подходят ли они нам или нет. В файле пример.  
 
Если кому извесно подкиньте ресурс где можно прочесть как делать такие вещи.  
 
Спасибо.
 
Как узнать, что ячейки с F6 по H9 имеют "верные" значения? с чем сравнивать? можно не использовать макросы, а обойтись ЕСЛИ()
 
Зачем макрос, кнопки?  
Вот формула, сравнивает заданный диапазон с диапазоном на Лист2.
 
Надо спомощю макроса. И к кнопке его прицепить :)    
Сравнивать с константами. вот к примеру:  
 
если Ф6 = 1 и ф7 =2 и ф8=4 и Г6=2 ... н9=3 тогда І7 = "Верно" иначе І7="не верно"  
 
цЬІфрЬІ для сравнивания надо подать в макросе а именно в операторе ИФ.
 
Формулу я знаю.  Но мне данЬІе с которЬІми сравнивать буду надо скрить к примеру в макросе. Так чтобЬІ небЬІло лишнего листа или ячеек с данЬІми для  сравнения.
 
Макрос
 
Спасибо.  Уже смотрю что там :)
 
Я так предпочитаю.  
Быстрее, особенно если в цикле много проверять:  
 
Sub Кнопка2_Щелкнуть()  
 
If [F6] = 1 Then
If [F7] = 2 Then
If [F8] = 3 Then
If [G6] = 4 Then
If [G7] = 5 Then
If [G8] = 6 Then
If [H6] = 7 Then
If [H7] = 10 Then
If [H8] = 11 Then
[I7] = "верно"
Else  
[I7] = "не верно"
End If  
End If  
End If  
End If  
End If  
End If  
End If  
End If  
End If  
 
End Sub
 
{quote}{login=if_infiniti}{date=30.11.2010 11:51}{thema=}{post}Формулу Но мне данЬІе с которЬІми сравнивать буду надо скрить к примеру в макросе. Так чтобЬІ небЬІло лишнего листа или ячеек с данЬІми для  сравнения.{/post}{/quote}  
Решение формулой, без макросов, данные скрыты  
PS: сможете найти где?
 
Согласен с Hugo - сразу отсекаем ненужное.
 
Сделал так как Казанский. Спасибо всем за помощь.    
 
Sub validate()  
   [U8] = IIf([Q7] = [J7+C7] And [Q8] = [J8+C8] And [Q9] = [J9+C9] _
   And [R7] = [D7+K7] And [R8] = [D8+K8] And [R9] = [D9+K9] _
   And [S7] = [E7+L7] And [S8] = [E8+L8] And [S9] = [E9+L9] _
   And [T7] = [F7+M7] And [T8] = [F8+M8] And [T9] = [F9+M9], "True", "False")
End Sub    
 
 
К МСН неплохо но мне подходит вариант с макросом :)    
 
п.с. Проверяю справльно ль введена сума ячеек :)  просто проверка способность сумировать в уме :) Спросите зачем... не спрашЬІвайте )  так надо :)  
 
Повторюсь... Всем спасибо за помощь!
 
А тест быстродействия показал одинаковый результат :-)    
 
Sub Казанский()  
[I7] = IIf([F6] = 1 And [F7] = 2 And [F8] = 3 And [G6] = 4 And [G7] = 5 And [G8] = 6 And _
   [H6] = 7 And [H7] = 10 And [H8] = 11, "верно", "не верно")
End Sub  
 
Sub Hugo()  
If [F6] = 1 Then
If [F7] = 2 Then
If [F8] = 3 Then
If [G6] = 4 Then
If [G7] = 5 Then
If [G8] = 6 Then
If [H6] = 7 Then
If [H7] = 10 Then
If [H8] = 11 Then
[I7] = "верно"
Else  
[I7] = "не верно"
End If  
End If  
End If  
End If  
End If  
End If  
End If  
End If  
End If  
End Sub  
 
 
Sub Time_Test()  
   
 Const N& = 1000  
   
 Dim i&, t!  
   
 t = Timer  
 For i = 1 To N  
   Казанский  
 Next  
 t = Timer - t  
 Debug.Print 1, Round(t, 3) & " s", Round(N / t) & " oper/s"  
   
 t = Timer  
 For i = 1 To N  
   Hugo  
 Next  
 t = Timer - t  
 Debug.Print 2, Round(t, 3) & " s", Round(N / t) & " oper/s"  
   
End Sub
 
Это на правильных данных, а на неправильных вариант Hugo конечно будет быстрее
 
Это когда все значения верны?  
А если первое неверно?
 
:-) Это Владимир пробный камень бросил... Доброй ночи!
 
Если первое неверно:  
 
1            3,625 s       276 oper/s  
2            0,047 s       21333 oper/s
 
{quote}{login=Юрий М}{date=01.12.2010 12:47}{thema=}{post}:-) Это Владимир пробный камень бросил... Доброй ночи!{/post}{/quote}Да, чтобы не заснули раньше времени ;-)  
Доброй ночи!
 
Заглянул - так и есть: расслабились и уснули :-)  
Вариант Игоря ведь не прописывает "не верно", если не доходит до последнего условия. Например, если в I7 ранее было "верно", а первое (или любое, кроме последнего) значение не верно, то I7 не меняется. Если исправить, то скорость резко снизится.  
 
Правильно было бы так:  
 
Sub Hugo()  
 If [F6] = 1 Then
   If [F7] = 2 Then
     If [F8] = 3 Then
       If [G6] = 4 Then
         If [G7] = 5 Then
           If [G8] = 6 Then
             If [H6] = 7 Then
               If [H7] = 10 Then
                 If [H8] = 11 Then
                   [I7] = "верно"
                   Exit Sub  
                 End If  
               End If  
             End If  
           End If  
         End If  
       End If  
     End If  
   End If  
 End If  
 [I7] = "не верно"
End Sub  
 
А быстрее так:  
 
Sub WithArr()  
 Dim a  
 a = Range("F6:H9").Value  
 If a(1, 1) = 1 Then  
   If a(2, 1) = 2 Then  
     If a(3, 1) = 3 Then  
       If a(1, 2) = 4 Then  
         If a(2, 2) = 5 Then  
           If a(3, 2) = 6 Then  
             If a(1, 3) = 7 Then  
               If a(2, 3) = 10 Then  
                 If a(3, 3) = 11 Then  
                   Cells(7, 9) = "верно"  
                   Exit Sub  
                 End If  
               End If  
             End If  
           End If  
         End If  
       End If  
     End If  
   End If  
 End If  
 Cells(7, 9) = "не верно"  
End Sub
 
Почему с переменной быстрее?
 
И впрямь, промелькнула такая мысль, но...  
На массивах всегда быстрее - не нужно 100 раз лезть на лист.
 
Дело не в переменной, а в создании массива. Спасибо, буду знать.
Страницы: 1
Читают тему
Наверх