2016-06-29 16 views
0

2つのセルがVBAでNOTであるかどうかを確認しようとしています。私はIsEmpty()を使用しているが、私はそれらを正しく使用しているとは思わない。これは私が持っているものです。それは常にif文に入るので機能しません。2つのセルが空であるかどうかを確認する

私の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

*私はそれらを正しく使用しているとは思わない* - 動作していないのですか?何が問題なの?あなたは単に論理を逆転させ、より良いと思われる 'Len'を使うことで簡単にできます...' Len(Cells(i、4))= 0そしてLen(Cells(i、5))= 0 Then 'doそれ以外の場合は何もしないEnd If' –

+0

'Ifセル(i、4)<>" "とセル(i、5)<>" "Then –

答えて

1

これらは、すべての有効な

もし((ないのisEmpty(セル(I、4)))と(ないのisEmpty(セル(I、5))))次に

もし細胞( I、4)<> ""、細胞(I、5)<> "" 次に

場合レン(セル(I、4))とlen(セル(I、5))次に

場合Len(Cells(i、4))> 0 And Len(Cells(i、5))> 0 Then

私の個人的な好みはLen()を使用することです。私はそれがきれいな外観だと思う。

コードをwithステートメントにラップすると、異なるワークシートの範囲を比較しやすくなります。

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

私が通常行っている方法は、参照されているセルをタイプにチェックすることです。私が知っている限り、セルを参照すると、インタープリタは値に最も適した型を返します。すなわち、1Doubleを返します。​​は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取った:それはのようにきれいに見えないかもしれないだけで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 

を取っタイプEmptyに細胞を比較したが、確かに利点がある場合。

関連する問題