2016-06-29 6 views
0

Я пытаюсь выяснить, есть ли две ячейки: NOT пустой в VBA. Я использую IsEmpty(), но я не думаю, что я использую их правильно. Это то, что у меня есть. Он не работает, потому что он всегда будет использоваться в инструкции if.Проверка наличия двух ячеек

Внутри моего if, я манипулирую некоторыми ячейками. Я не должен манипулировать ими, если я пойду в другое. (Что ничего не делает), но они тоже меняются.

For i = 2 To rows 
     If ((Not IsEmpty(Cells(i, 4))) And (Not IsEmpty(Cells(i, 5)))) Then 
      'Do stuff... 
     else 
      'Do nothing... 
     end if 
next i 

Это лучший способ?

+0

* Не думаю, что я использую их правильно * - это не работает? и что не работает? Вы можете просто отменить логику и использовать «Лен» (который, кажется, работает лучше) ... «Если Лен (Ячейки (i, 4)) = 0 и Лен (Ячейки (i, 5)) = 0 Затем« do Nothing Else 'do stuff End If' –

+0

'If Cells (i, 4) <>" "И ячейки (i, 5) <>" "Then' –

ответ

1

Все это действует

Если ((Не IsEmpty (Cells (я, 4))) И (Не IsEmpty (Cells (я, 5)))) Тогда

Если клетки (я, 4) <> "" и клетки (я, 5) <> "" Тогда

If Len (клетки (I, 4)) А LEN (клетки (I, 5)) Тогда

Если Лен (ячейки (i, 4))> 0 и Лен (ячейки (i, 5))> 0 Затем

Мое личное предпочтение - использовать Len(). Я думаю, это чистый взгляд.

Обнаруживание кода в операторе с помощью упрощает сравнение диапазонов на разных листах.

With managerSheet 

    For i = 2 To rows 
      If Len(.Cells(i, 4)) And Len(.Cells(i, 5) Then 
       'Do stuff... 
      else 
       'Do nothing... 
      end if 
    next i 

End With 
0

Моя проблема была не в выражении if, а в сфере моих вызовов. Я забыл включить объем ячеек. managerSheet.Cells(i, 4).. etc Спасибо за помощь

0

Метод, который я обычно выполняю, это проверить привязанную ячейку к типу. Насколько мне известно, когда вы ссылаетесь на ячейку, интерпретатор возвращает тип, который наилучшим образом соответствует значению, т. Е. 1 возвращает Double, "abc" возвращает String и так далее. Когда ячейка пуста, возвращаемый тип - Empty.

Я провел тест производительности, используя указанную технику here.

Тест 1: Использование Len() для сравнения клетки взял 40,9080069854244

dTime = MicroTimer 
For i = 1 To 10000 
    If Len(Cells(i, 4)) And Len(Cells(i, 5)) Then 
    'Do something 
    Else 
    'Do nothing 
    End If 
Next i 
dTime = MicroTimer - dTime '40.9080069854244 

Тест 2: Сравнение клеток к типу Empty только взяло 21.0493610010926

dTime = MicroTimer 
For i = 1 To 10000 
    If Cells(i, 4) <> Empty And Cells(i, 5) <> Empty Then 
    'Do something 
    Else 
    'Do nothing 
    End If 
Next i 
dTime = MicroTimer - dTime '21.0493610010926 

Он не может выглядеть как чистый, но если определенно имеет выгоду.

Смежные вопросы