【Excelマクロ】VBAでよく出る「Nothing」ってなに?

「Nothing」ってどういう意味?

VBAの学習を進めていると、必ずどこかで出会うキーワードに「Nothing」があります。

英語の「ナッシング」=「何もない」という意味は知っていても、

  • 変数とどう関係があるの?
  • 「= Nothing」って何をしているの?
  • 実際にどう使えばいいの?

という疑問を持つ方は多いと思います。

実務でもよく使われる「Nothing」の役割と使い方について、具体例や注意点も交えて丁寧に解説します。

「Nothing」はオブジェクトにだけ使える特別なもの

まず前提として、「Nothing」は「セル」や「シート」などの“モノ(オブジェクト)”を一時的に入れておく変数にだけ使える「空の状態」を表すものです。

たとえば、次のような“Excelの要素”を入れる変数に対して使います。

  • Workbook(ブック)
  • Worksheet(シート)
  • Range(セル範囲)
  • Object(汎用オブジェクト)

例:Worksheet型にNothingを使う

Dim ws As Worksheet
Set ws = Nothing

このコードでは、wsという変数に「何もセットしていない状態」にするということです。

「Nothing」を使う理由と役割

1. オブジェクトが未設定かどうかを判定できる

たとえば、次のように書くことで「変数がセットされているかどうか」を判定できます。

If ws Is Nothing Then
    MsgBox "シートが設定されていません"
End If

このように、「まだオブジェクトがセットされていない状態」かをチェックすることができます。


2. オブジェクトを解放してメモリを軽くできる

処理が終わったあとに Set 変数 = Nothing とすることで、オブジェクトを解放できます。

Set wb = Nothing

と書くことで、変数 wb(Workbook型)の中身を消去=開放することができます。

開放というのは、人間の脳で考えると、この内容を覚え続けてください、と同じことで、忘れていいですよ、という指示を出しているとイメージするとわかりやすいかもしれません。

具体例で理解しよう:「Nothing」のチェックと解除

例1:オブジェクトがセットされていない状態のチェック

次のコードでは、シート変数が未設定なら警告を出します。

Dim ws As Worksheet

If ws Is Nothing Then
    MsgBox "シートが未設定です"
Else
    MsgBox "シートは設定されています"
End If
  • ws という変数は宣言されましたが、まだ何のシートも代入されていません。
  • そのため ws Is NothingTrue になります。

例2:処理が終わったあとに変数を開放する

Dim wb As Workbook
Set wb = Workbooks.Open("C:¥ファイル.xlsx")

' 処理内容(省略)

Set wb = Nothing

処理が終わったあとに Nothing を代入しておくことで、不用意に変数が残り続けてバグの原因になるのを防ぎます。

「Nothing」の具体的な活用シーン

1. 変数が正しくセットされたかチェックしたいとき

Dim rng As Range

If rng Is Nothing Then
    MsgBox "セル範囲が設定されていません"
    Exit Sub
End If

フォームから入力されたセル範囲などが「未設定」である場合に、その時点で動作を停止する処理を入れることができます。

2. ループ処理の中で一度だけオブジェクトを使いたいとき

Dim foundRow As Range
Dim i As Long

For i = 2 To 100
    If Cells(i, 1).Value = "特定の値" Then
        Set foundRow = Rows(i)
        Exit For
    End If
Next i

If Not foundRow Is Nothing Then
    foundRow.Font.Bold = True
End If
ポイント
  • 条件に一致したときだけ foundRow に行をセット。
  • 最後に Is Nothing で確認し、見つかっていたら処理実行。

「Nothing」を使いこなすメリット

  • 事前チェックで安全性アップ
    → 未設定のまま使ってしまう事故を防止
  • 処理の正確さが上がる
    → 変数がちゃんとセットされたことを確認できる
  • メモリの無駄使いを防げる
    → 使い終わった変数をきちんと空っぽにすることで、Excelの中に“もう使わない情報”が溜まり続けるのを防げる

よく使う「Nothing」チェックのパターン

If obj Is Nothing Then
    ' まだ設定されていないときの処理
End If
If Not obj Is Nothing Then
    ' 正しくセットされているときの処理
End If

この2つのパターンは定番です。見かけたときに「状態確認しているんだな」と理解できればOKです。

補足:「Nothing」と他の初期値との違い

  • 数値型 (Long, Double) の初期値は 0
  • 文字列 (String) の初期値は ""(空文字)
  • オブジェクト型だけが Nothing

この違いを理解しておくと、条件分岐で使うときにも迷いません。

まとめ

最後に、「Nothing」についての要点を整理しておきます。

ポイント整理

  • 「Nothing」はオブジェクト型変数の初期状態
  • Is Nothing で「未設定かどうか」を判定できる
  • Set 変数 = Nothing でオブジェクトを解除できる
  • 未設定のまま使うとエラーになる
  • 処理後に Nothing を代入してメモリを開放するのが安全

VBAに慣れてくると「Nothing」は見慣れたキーワードになりますが、最初は意味が取りづらいものです。

しかし、今回の内容で記載したように「オブジェクト型変数の空っぽの状態」として理解しておけば、実務でも応用が効くようになります。

ミスを減らすためにも、「Nothing」の意味と使い方をしっかり押さえておきましょう。

コメント