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


いつもありがとうございます!
皆さん、こんにちは。ご覧いただきありがとうございます。
“日々の業務にちょうどいい自動化を”──
業務改善アプリケーションの作成を行っている「ソフトデザイン工房」 です。この記事が、あなたのVBAマクロの価値をさらに高める一助となれば幸いです。
VBAを活用して、自分自身や身近なコミュニティに合ったアプリケーションを作成し、仕事量は半分に、成果は2倍に──そんな未来を目指すあなたを応援しています。
本稿では、オブジェクトを変数として取得する方法を解説いたします。合わせて、オブジェクトを変数として取得しないコードの書き方をした場合の危険性や弊害を解説します。
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 With21行目はおまけですが、5段落目で取得したオブジェクト(データ範囲)を青色に塗りつぶす処理です。これを実行すると、以下の出力が得られます。

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

ご覧いただきありがとうございました。
VBAスキルアップの参考情報
近年は、ChatGPTをはじめとするAIの登場によって、学習のスタイルが大きく変わりました。
分からないことがあれば、AIに尋ねれば答えがすぐに見つかる時代です。
とはいえ、AIを使いこなすには、自分自身の基本的な知識や理解力が欠かせません。
全体像をつかむためには、やはり書籍などで体系的に学んでおくことが今でも有効です。
そのうえでAIを活用すれば、自分の理解度に合わせた的確な解説や、応用のヒントを得ることができます。
「学んで基礎を築く → AIで補い発展させる」──このサイクルを重ねることで、VBAスキルは着実に高まっていくでしょう。
VBAのスキルアップ
VBAを学び始めるなら
入門書は、どれを選んでも大きな差はないように感じます。
どれを選ぶかに悩むことに時間をかけるよりも、まずは手頃な一冊を手に取って進めてみるのがおすすめです。
もし迷ったときには、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。
基礎を超えて力をつけたいなら
私は上級者を目指していましたので、入門書にとどまらず、このような内容の濃い一冊を選んで学んでいました。
今は誰でもAIを活用できる時代になりましたが、上級者を目指す方にとっては、AIをより上手に活用するという意味でも、こうした本は今なお価値があります。
このレベルの本を一冊持っておくことに、損はないでしょう。
資格で能力を証明したいなら
VBAのプログラミング能力を客観的に示したい場合には「VBAエキスパート試験」があります。
特に「スタンダード」の方は上級者向けです。
あなたが社内業務の改善を行う立場であっても、VBAで作成したシステムをお客様に納める立場であっても、この資格は信頼や安心につながるでしょう。
以下の公式テキストが販売されています。
プログラミングの一般教養
「独学プログラマー」というプログラミングの魅力を解説した書籍があります。
これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。
今はAIにコードを尋ねれば、答えが返ってくる時代です。
しかし、この本からは「コード」以上に、プログラミングに向き合う姿勢や考え方を学ぶことができるでしょう。
こちらの記事でも紹介しています。もしよろしければご覧ください。
【初心者歓迎】無料相談受付中

いつもありがとうございます!
限られた時間をより良く使い、日本の生産性を高めたい──
みんなの実用学を運営するソフトデザイン工房では、業務整理や業務改善アプリケーション作成のご相談を承っております。
お気軽にご相談ください。
こちらの記事でも紹介しております。
おわりに


ご覧いただきありがとうございました。
今回の記事では、「オブジェクトを変数として取得する方法」を解説しました。
お問い合わせやご要望がございましたら、「お問い合わせ/ご要望」フォームまたはコメント欄よりお知らせください。
この記事が皆様のお役に立てれば幸いです。
なお、当サイトでは様々な情報を発信しております。よろしければトップページもあわせてご覧ください。
この記事を書いた人






