【ExcelVBA】Nothingの設定方法・If文で条件分岐する方法を徹底解説!

皆さんは、VBAでオブジェクト変数の値を設定・クリアする方法を知っていますか?

ブック、シート、セルなどのオブジェクトを変数にして処理を作るとき、使わなくなった変数はオブジェクトを解放しないと余計なメモリを使ってしまいます。

そのため、オブジェクト変数の値を設定・クリアする方法を覚えておくと便利です!

そこで今回は、

・「Nothing」を使ってオブジェクトの状態を空にする方法

といった基礎的なことから、

・If文 & Is演算子を使ってNothingを判定する方法

・【よくある議論】「Set obj = Nothing」でメモリの解放はすべきか?

といった応用的な方法まで、徹底的に解説します!

Nothingとは?

VBAでオブジェクトの変数を扱うときは、参照型で値をセットします。

Set 変数名 = セットするオブジェクト」のように値を入れるのですが、使わなくなったタイミングオブジェクトを解放しないと、メモリを余計に使い続けてしまうんですよね。

このような時に、オブジェクト解放する方法が「Nothing」です。

使い方:

Nothingをオブジェクト変数にセットすることで、オブジェクトを解放することができます。

Nothingを使ったオブジェクト解放方法については以下で詳しく解説しているので、気になる方は見てみてくださいね!

【ExcelVBA】メモリーの解放方法・タイミングについて徹底解説!
更新日 : 2019年4月29日

If文 & Is演算子を使ってNothingを判定する方法

ここまでオブジェクト変数を解放する方法を解説しましたが、変数を使って処理を作るときは、オブジェクトの変数の状態(値が入っている or Nothing)を意識して作っていくケースが圧倒的に多いです。

そのため、オブジェクト変数の状態を確認する方法を覚えておくのがおすすめです!

オブジェクト変数が「Nothing」のときの処理を作る方法

『オブジェクト変数が「Nothing」のときの処理を作る方法』と読んで、次のように書くことを想像した方もいるのではないでしょうか?

一見あっているかのように見えますが、このコードだとエラーが出てしまいます。

実行結果:

条件を判定するIf文で、「If wsObj = Nothing Then」のように書いて条件を判定しようとしていますが、オブジェクト変数でNothingを判定するときは「Is演算子」を使って次のように書かなければなりません。

実行結果:

慣れないうちは大変かもしれませんが、「オブジェクト変数とIs演算子はセット」で覚えるのがおすすめです!

オブジェクト変数に値が入っているときの処理を作る方法

「オブジェクト変数がNothingのときの処理」と同じぐらい、オブジェクト変数に値が入っているときの処理を作るケースはよくあります。

というか、「オブジェクト変数に値が入っているとき」の処理を作るケースの方が多いですね。

そのため、「オブジェクト変数に値が入っているときの処理を作る方法」を覚えておくのがおすすめです!

使い方は簡単で、先ほどのIf文で使ったIs演算子の条件の前に、Not演算子を付けるだけです。

わかりやすくするために、先ほどの処理とNot演算子を使ったときサンプルを用意しました。

サンプル:

Not演算子If文の条件の最初につけるだけなので、合わせて覚えておくと便利です!

補足:「Set obj = Nothing」でメモリの解放はすべきか?

ここまでオブジェクト変数を解放する方法・状態を意識して処理を分ける方法などを解説してきましたが、、、VBA界隈では、オブジェクト変数の解放をいつやればいいの?といった議論がよくされています。

ここからは補足なのですが、以下を意識してオブジェクト解放する処理を作っておけばOKです!


・オブジェクト変数は使わなくなったタイミングで、「Nothing」する
・End Subのタイミングで自動的にNothingされるので、最後まで使う場合は「Nothing」しなくても良い

ネットで調べていると稀に、処理の最後で全てのオブジェクト変数をまとめて「Nothing」している次のようなコードを見かけますが、全く意味がありません。

なぜなら、処理の最後の「End Sub」で自動的にオブジェクトが解放されるからです。

そのため、「使い終わったタイミングでNothingをセット・最後まで使った変数はNothing不要」と頭の片隅に入れておくと、わかりやすく無駄のないコードが書けるのでおすすめです!

まとめ

今回は、VBAのNothingの使い方について基礎から徹底的に解説しました。

オブジェクト変数を使うケースはとても多いので、覚えておくのがおすすめです!

使い方も簡単なので、実際にコードを書いて試してみてくださいね!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

フリーランスエンジニア兼ライターのワキザカ サンシロウです。
ExcelVBAの自動化ツール開発、WEB開発をメインにエンジニア業務をこなしつつ、サムライエンジニアにてライター業務をしております。

プログラミングをこれからやってみたい方に向けて、ためになる記事を全力で書いていきますので宜しくお願い致します!

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説