3日がかりのその仕事、3分で終わらせる方法教えます!
パソコンスキルの心技体

「Is 演算子」と「Nothing」

2014年10月10日
  • このエントリーをはてなブックマークに追加
  • follow us in feedly

達人養成塾 小川です。

イベントとフォーム講座の受講生から、こんな質問がありました。

「以下のif文について解説していただけると幸いです。
あまり見たことのないif文なのでよろしお願いします。

Dim r As Range

' ... 中略
' ... 中略
' ... 中略

If Not r Is Nothing Then

Else

End If

発展編1でくわしく取り扱っている内容ですが、ここでは、簡単にご説明。

Is 演算子は、比較演算子です。
つまり、 if hensu > 3 then とかいうときの「 > 」とかと同じ仲間です。

ただし、比較対象たる左辺、右辺とも、数字や文字、日付などのデータではなく、オブジェクトになります。

左辺で示されるオブジェクトと右辺で示されるオブジェクトが同じものなら True 、そうでなければ False という戻り値が得られます。

Nothing は、オブジェクト型の変数の初期値にもなっていますが、要は、「特にどのオブジェクトも示していない」という状態です。

最初にお見せしたサンプルコードに話を戻します。

ここで rはオブジェクト型の変数です。
「r Is Nothing」は、rの中身が空のとき True、すでに何らかのセルへの参照が設定されていたときには False を返します。
だから、「Not r Is Nothing」だと、その反対。rの中身が空のとき False、すでに何らかのセルへの参照が設定されていたときには True を返します。

この「 ~ Is Nothing」というパターンに慣れると、マクロを書くときのアイデアの幅も広がるでしょう。

ということで、最後に練習問題。
以下は、「is nothing」の参考例です。
アクティブなエクセルファイルに Sheet1, Sheet2 という2枚のシートがあるという前提で、以下の test1, test2 のマクロを実行した結果どうなるかを予測し、その後、実際に動作確認してみてください。

Sub test1()
    Dim w As Worksheet
    Set w = Worksheets("sheet1")
    If w Is Worksheets("sheet1") Then
        Debug.Print "同じです"
    Else
        Debug.Print "違います"
    End If
    If w Is Worksheets("sheet2") Then
        Debug.Print "同じです"
    Else
        Debug.Print "違います"
    End If
    If w Is Nothing Then
        Debug.Print "同じです"
    Else
        Debug.Print "違います"
    End If
End Sub
 
Sub test2()
    Dim w As Worksheet
     
    If w Is Worksheets("sheet1") Then
        Debug.Print "同じです"
    Else
        Debug.Print "違います"
    End If
End Sub

キーワード

コメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

最新の記事

人気記事

最新記事

カテゴリ

最新コメント

タグクラウド