「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 Nothing
がTrue
になります。
例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」の意味と使い方をしっかり押さえておきましょう。
コメント