【簡単エクセル/Excel VBA マクロ】オブジェクトを変数として取得・指定する方法|Set ~



いつもありがとうございます!
ノンプログラマー向け「Excelマクロ・VBA解説シリーズ」へようこそ。
本稿では、オブジェクトを変数として取得する方法を解説いたします。合わせて、オブジェクトを変数として取得しないコードの書き方をした場合の危険性や弊害を解説いたします。
VBAで「オブジェクトを変数として取得」する方法

いきなり「オブジェクト」と「変数」という分かりにくいことばが登場しました。まず、ことばの意味は、以下のようになっています。
- オブジェクト
VBAで操作する「対象」のこと。
VBAにおいてオブジェクトとは、具体的には、Workbook や Worksheet、Range(単一セルや複数セル)などのことを指します。 - 変数
「値」を入れておく「箱」のようなもの。
変数は、その名の通りコード内の指示によって値を変えることができます。 - オブジェクト変数
「オブジェクト」を入れておく「箱」のようなもの。
通常の変数が数値や文字列などを格納するのに対して、オブジェクト変数はオブジェクトを格納します。
では、オブジェクトを変数として取得する方法を解説いたします。
通常の変数であれば、以下の構文で変数に値を格納できます。
変数 = 値
しかし、オブジェクト変数にオブジェクトを格納する場合は、これではできません。Set ステートメントを使う必要があります。
ステートメントとは、VBAの中で何らかの固有の働きをすることを定義したものの呼称です。Set ステートメントの構文は以下の通りです。
Set 変数 = オブジェクト
例として、ブックを開くと同時にオブジェクト変数として格納するコードを以下に示します。
Sub sample()
‘ 変数の宣言
Dim file_path as String
Dim wb as Workbook
‘ 変数にファイルパスを代入
file_path = “your_directory¥your_book.xlsm”
‘ ブックを開くと同時にオブジェクト変数に格納
Set wb = Workbooks.Open(file_path)
End Sub
解説していきます。
‘ 変数の宣言
Dim file_path as String
Dim wb as Workbook
冒頭のこの部分では、変数を宣言しています。VBAにおいて変数の宣言は必須ではありませんが、コードの可読性の向上やエラー防止に役立ちます。
‘ 変数にファイルパスを代入
file_path = “your_directory¥your_book.xlsm”
次に変数にファイルパスを代入しています。
‘ ブックを開くと同時にオブジェクト変数に格納
Set wb = Workbooks.Open(file_path)
ここでは、Workbooks
というオブジェクトに Open
というメソッドを使って指定したブックを開いています。
同時に、Set ステートメントを使って、開いたブックをオブジェクト変数 wb として取得しています。
尚、"メソッド"とは、オブジェクトを操作するための命令文のことです。
以上がオブジェクト変数の取得の方法です。
オブジェクト変数としてブックのみを取得すればよいマクロは実際には少ないと思いますので、他の代表的なオブジェクトである Worksheet
と Range
の取得を追記したコードを以下に例示します。
Sub sample()
' 変数の宣言
Dim file_path As String
Dim wb As Workbook
Dim ws As Worksheet
Dim rng As Range
' 変数にファイルパスを代入
file_path = “your_directory¥your_book.xlsm”
' ブックを開くと同時にオブジェクト変数に格納
Set wb = Workbooks.Open(file_path)
' ワークシートをオブジェクト変数に格納
Set ws = wb.Worksheets("Sheet1")
' データ範囲をオブジェクト変数に格納
Set rng = Range(ws.Cells(1, 1), ws.Cells(10, 10))
' 指定したデータ範囲を青にする
With rng.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent5.
.TintAndShade = 0.799981688894314
.PatternTintAndShade = 0
End With
End Sub
追記した部分を解説していきます。
' ワークシートをオブジェクト変数に格納
Set ws = wb.Worksheets("Sheet1")
15行目では、Worksheet
オブジェクトを変数に格納しています。
' データ範囲をオブジェクト変数に格納
Set rng = Range(ws.Cells(1, 1), ws.Cells(10, 10))
18行目では、Range
(データ範囲) オブジェクトを変数に格納しています。
' 指定したデータ範囲を青にする
With rng.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent5.
.TintAndShade = 0.799981688894314
.PatternTintAndShade = 0
End With
21行目はおまけですが、5段落目で取得したオブジェクト(データ範囲)を青色に塗りつぶす処理です。これを実行すると、以下の出力が得られます。

VBAで「オブジェクトを取得・指定しないこ」との危険性と弊害
オブジェクトを変数として取得し、明示的に指定しなければ、操作する対象オブジェクトがあいまいになり、意図しないオブジェクトに変更が加わる危険性があります。
詳しくは、当サイトの記事「【Excelマクロ・VBA】Excelマクロ・VBAの全体像」の中のセクション1「オブジェクトの取得・指定」をご覧いただければ幸いでございます。
また、オブジェクトを変数として取得しておかないと、その後のコードで該オブジェクトを参照できず、コードを実装していく上で非常に不便です。

ご覧いただきありがとうございました。
関連記事
本稿と関連の深い記事です。もしよろしければ、合わせてご活用ください。
- 【簡単エクセル/Excel VBA マクロ】解説シリーズ目次 | みんなの実用学(jitsuyogaku.com)
- 【簡単エクセル/Excel VBA マクロ】Excel VBA マクロの全体像 | みんなの実用学 (jitsuyogaku.com)
VBAプログラミングスキルアップのための参考情報
ここでは参考図書を紹介いたしますが、これらに限らず自分に合うものを選ぶことが重要だと考えております。皆様の、より一層のご成功を心よりお祈りしております。
VBAプログラミングのスキルアップ
学習用としてもハンドブックとしても役立つ便利な書籍がこちらです。価格はやや高めですが、その内容は非常に充実しています。相応のスキルを身に付けるためには、こうしたしっかりとした書籍を一冊持っておくと良いでしょう。
入門書に関しては、どの書籍も大きな違いはありません。あまり迷うことに時間をかけるよりは、手頃なものを一冊選んでみると良いでしょう。VBAの入門書は数多く出版されていますので、興味がある方はぜひチェックしてみてください。
甲乙つけがたい場合、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。
\チェックしてみよう/
\チェックしてみよう/
\チェックしてみよう/
VBAのプログラミング能力を客観的に証明したい場合には「VBAエキスパート試験」があります。この試験はVBAの知識を公式に認定するものです。VBAの総合的な能力獲得を目指す方に適しています。以下の公式テキストが販売されております。
プログラミングの一般教養
「独学プログラマー」というプログラミングの魅力を解説した書籍があります。これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。
こちらの記事でも紹介しております。もしよろしければご覧ください。

おわりに


ご覧いただきありがとうございました。
今回の記事では、「オブジェクトを変数として取得する方法」を解説いたしました。
お問い合わせやご要望等ございましたら、「お問い合わせ/ご要望」またはコメントにて、ご連絡いただければ幸いでございます。
少しでも皆様の人生に変化をもたらすきっかけとなれば幸いでございます。
この記事を書いた人
- ■人生を追求する凡人■日本一安全で、気の向くままに自分の時間を過ごせる、こだわりのキャンプ場を作るのが夢■光学・機械系エンジニア(歴20年、内マネジメント10年、特許数件権利化)/副業フリーランスエンジニア■読書・文学愛好■人生は時間そのもの。ひとりでも多くの人が「より良い人生にするために時間を使って欲しい」と願い、仕事のスキルの向上、余暇の充実、資産形成を研究。■VBAアプリ開発サービス提供中(業務委託 / VBA使用経験20年)■Python愛好(歴5年)■VBAエキスパート「Excel VBA スタンダード」(上級者向け資格)/ Python 3 エンジニア認定基礎(経済産業省「ITスキル標準(ITSS)」に掲載)