【Excelマクロ入門】ブックとシートの基本操作とオブジェクトの考え方

ようこそ♪ささぽんのExcel教室へ。
マクロを書いていて、「このブックを開いて処理したいけど、どう指定すればいいのかな?」と悩んだことはありませんか?
そんなときに必要になるのが、「ブック」や「シート」をマクロで操作する方法、そしてそれらを正しく指定するための「オブジェクト」の考え方です。
この記事では、初心者の方にも分かりやすく、ブックやシートの基本操作と、マクロでのオブジェクトの扱い方をやさしく解説していきます!

この記事は以下のような方におすすめです!
・ブックやシートをマクロで指定する方法が分からない方
・「オブジェクトって何?」という段階から理解したい方
・マクロのコードを自分で書いて動かせるようになりたい方
このブログは「基礎からExcelマクロを学びたいと考えている方」や、
「独学での習得に壁を感じた方」に向けて、やさしく、わかりやすく、丁寧に解説しています。
読み終わるころにはきっと、
「Excelマクロって意外と簡単かも!」「もっとやってみたい!」と思えるはず。
一緒に楽しく学びながら、Excelマクロ使いを目指しましょう!
![]() | よくわかる Microsoft® Excel® マクロ/VBA Office 2021/2019/2016/Microsoft 365対応 [ 富士通ラーニングメディア ] 価格:2860円 |
![]() | Excel自動化[最強]時短仕事術 マクロ/VBAの基本&業務効率化の即効サンプル【電子書籍】[ 守屋 恵一【著】 ] 価格:1518円 |
目次
1. オブジェクトとは?
マクロで処理をするとき、例えば「セルに値を入れる」「行を削除する」など、何かしらの対象物に命令をしていますよね。
しかし、「どのブック・どのシート・どのセルに対して行うのか」を正しく指定しておかないと、意図しない場所に書き込まれたり、違うシートが操作されたりしてしまいます。
この「操作する対象をきちんと指定する」ために欠かせないのが、オブジェクトという考え方です。
■オブジェクト=Excelの“部品”と考えよう
Excelには、セル・シート・ブック・グラフなど、さまざまな「操作できる対象」があります。
マクロでは、こうしたExcelの中の部品1つひとつを「オブジェクト」と呼びます。
ここでは、特によく登場する3つの基本オブジェクトをご紹介します!
①Workbookオブジェクト
Excelファイル全体を指すオブジェクトです。
ファイルを開いたり、保存したり、閉じたりするときに使います。
例:
Workbooks("売上管理.xlsx").Activate
→ 「売上管理.xlsx」という名前のブックをアクティブにする
②Worksheetオブジェクト
タブで切り替える各シートのことです。
セルを操作したり、データを読み書きするときは、そのセルのあるシートを指定すると確実です。
例:
Worksheets("データ入力").Select
→ 「データ入力」という名前のシートを選択
③Rangeオブジェクト
セルやセル範囲を表すオブジェクトです。
値の入力、取得、書式設定など、最もよく使う存在かもしれません。
例:
Range("A1").Value = "こんにちは"
→ A1セルに「こんにちは」と入力する

このように、Excelの中にはたくさんの部品(オブジェクト)があるので、どのブックで、どのシートで、どのセルに対して処理をするのかを正しく指定する必要があります。
ここからは、正しく指定する方法について具体的にみて行きましょう!
■オブジェクトの指定方法
マクロでは、どのオブジェクトに対して処理を行うかを、大きい順に「.(ドット)」でつないで指定していきます。
例えば、次のようなコードがあります:
Workbooks("売上管理.xlsx").Worksheets("5月").Range("A1").Value = "こんにちは"
これは、
- 「売上管理.xlsx」という名前のブック
- 「5月」という名前のシート
- 「A1セル」
という順で処理対象を指定し、「こんにちは」と入力する処理です。
このように、オブジェクトは「ブック → シート → セル」といったように大きいものから順にたどって指定していくことで、正しい場所の処理を指示することができます。
処理する対象の住所を指定するイメージです!
住所に例えると:
- 都道府県(ブック)
- 市区町村(シート)
- 番地(セル)
どの家に配達するかが曖昧だと、違う場所に届いてしまうかもしれませんよね。
マクロでもそれと同じで、オブジェクトの順番とつなぎ方がとても大事になります!
次の章では、オブジェクトの中でも最も基本となるブックとシートの操作方法を、具体的に見ていきましょう!
2. ブック(Workbook)の操作方法
ここからは、具体的なオブジェクトの1つである「ブック(Workbook)」をどう操作するかを見ていきます。
■ブックを指定する方法
ブック(Workbook)を指定する方法は主に3つあります。
まずは、それぞれの違いをざっくり表で整理してみましょう。
指定方法 | 指すブック | 使う場面 | 注意点 |
ThisWorkbook | このマクロが入っているブック | 自分のファイル内だけで処理したいとき | 他のファイルには使えない |
ActiveWorkbook | 画面上で一番手前にあるブック | 操作しているブックに処理したいとき | アクティブなブックが意図と違う可能性あり |
Workbooks(“名前.xlsx”) | 名前で指定したブック | 特定のブックを確実に操作したいとき | ファイル名のスペルミスや拡張子違いに注意 |
このように、それぞれのブック指定方法の特徴を押さえておくことで、状況に応じて使い分けができるようになり、マクロを思い通りに動かせるようになります!
ここからは 実際にどのように使うのか?を、具体的なコード例と一緒に見ていきましょう。
①ThisWorkbook
ThisWorkbook は、このマクロが書かれているブック(ファイル)を指します。
処理がこのファイル内だけで完結するケースで使うのが基本です。
ThisWorkbook.Sheets(1).Range("A1").Value = "これはThisWorkbookです"
このコードは、マクロを記述したファイルの1枚目のシートの、A1セルへ「これはThisWorkbookです」と入力するものです。
ぜひ、Excelファイルを複数(例:main.xlsm、data1.xlsx、data2.xlsx)開いた状態で試してみてください。
main.xlsm にこのコードを書いて実行すると、どのブックがアクティブであっても、main.xlsm の A1セルにだけ処理が行われるはずです!
このように、「このマクロが入っているブックだけに確実に処理をしたい」ときは、ThisWorkbook を使いましょう!
② ActiveWorkbook
ActiveWorkbook は、今アクティブ(最前面)になっているブックを指します。
ユーザーが操作中のブックに対して処理を行いたい場合に使うのが基本です。
ActiveWorkbook.Sheets(1).Range("A1").Value = "これはActiveWorkbookです"
このコードは、現在アクティブなブックの1枚目のシートの A1セルに、「これはActiveWorkbookです」と入力します。
ここでも、Excelファイルを複数開いた状態で試してみましょう。
マクロは main.xlsm に書いたまま、実行前に data1.xlsx をクリックしてアクティブにしてください。
すると、data1.xlsx の A1セルに処理が実行されるのがわかります
ただし注意点として、アクティブなブックが想定と違っていた場合、意図しないファイルに処理がされてしまう可能性があります。
ActiveWorkbookは、状況に応じて慎重に使いたい指定方法です。
③ Workbooks(“ファイル名.xlsx”)
Workbooks(“ファイル名.xlsx”) は、開いているブックの中から、特定の名前で指定する方法です。
アクティブ状態に関係なく、明示的にファイルを指定して処理をしたいときに便利です。
Workbooks("data2.xlsx").Sheets(1).Range("A1").Value = "これは名前指定です"
このコードは、data2.xlsx の1枚目のシートに「これは名前指定です」と入力します。
main.xlsm にマクロを書いた状態でこのコードを実行すると、アクティブなブックがどれでも関係なく、data2.xlsx の A1セルに処理されるのが確認できるはずです。
注意点として、ファイル名を正確に記述しないとエラーになります。
特に .xlsx や .xlsm などの拡張子の違いには気をつけましょう!
このように、それぞれの指定方法の特徴を実際に動かしながら確認しておくと、「どのファイルに対して処理するのか?」をコントロール出来るようになります。
■ブックを操作する
マクロでは、ブックを開いたり、新しく作成したり、保存したりと、ファイルを操作する場面がたくさんあります。
ここでは、基本的な3つの操作方法をテンポよく確認していきましょう!
①ブックを開く(Workbooks.Open)
Workbooks.Open "C:\Users\user\Documents\売上管理.xlsx"
このコードは、指定したパスのブックを開きます。
ファイルのパスは「””」で囲み、フルで書く必要があります。
補足: ファイルパスの取得方法
フォルダ内で該当ファイルの上で【Shift + 右クリック】 をし、【パスのコピー】を選択することでパスをコピーできます。

② ブックを新規作成する(Workbooks.Add)
Workbooks.Add
ActiveWorkbook.Sheets(1).Range("A1").Value = "新しいブックに書き込みました"
新しい空のブックが作成されます。
作った時点でそのブックが ActiveWorkbook になるので、続けて記述することで新しいブックに処理ができます。
③ブックを保存する(Save, SaveAs)
上書き保存:
ActiveWorkbook.Save
すでに保存済みのブックに変更があれば、そのまま上書き保存されます。
別名で保存する:
ActiveWorkbook.SaveAs "C:\Users\user\Documents\保存テスト.xlsx"
ファイル名を指定して保存する場合は SaveAs を使い、ダブルクォーテーションでファイルパスを指定することで名前をつけて保存することができます。
④ブックを閉じる(Close)
ActiveWorkbook.Close
アクティブなブックを閉じる処理です。
保存していない状態で閉じると、変更内容が失われることがあるので注意が必要です。
保存して閉じる:
ActiveWorkbook.Close SaveChanges:=True
必要に応じて、保存の有無を指定することもできます。
このように、ブックの操作は「開く→作る→保存→閉じる」の一連の流れで覚えておきましょう!
3. シート(Worksheet)の操作方法
Excelマクロで何か処理を行うとき、ブックと同じく、「どのシートに対して処理するのか?」を明確に指定することが大切です。
例えば「A1セルに書き込みたい」と思っても、シートを指定していないと、現在アクティブなシートに処理されてしまいます。
ミスを防ぐためにも、次はシートの指定方法をしっかりおさえましょう!
■シートの指定方法
シートを指定する方法は、大きく分けて以下の3つがあります:
指定方法 | 指すブック | 使う場面 | 注意点 |
Worksheets(“名前”) | 指定した名前のシート | 名前で明確に指定したいとき | 名前のスペルミスや存在しない名前はエラーになる |
Worksheets(X) | 表示順X番目のシート | 名前が頻繁に変わる環境/順序で管理したいとき | シートの並び順が変わると違うシートになる |
ActiveSheet | 今アクティブなシート | ユーザー操作中のシートに対して柔軟に処理したいとき | 実行時に想定外のシートがアクティブだとミスにつながる |
では、それぞれの方法を具体的に見ていきましょう!
①Worksheets(“名前”)
Worksheets(“名前”) は、指定した名前のシートを操作するための書き方です。
マクロの対象となるシートを明確に指定したいときに使うのが基本です。
Worksheets("売上").Range("A1").Value = "こんにちは"
このコードは、「売上」という名前のシートの1枚目の A1セルに、「こんにちは」と入力する処理です。
シート名が「売上」のワークシートを用意して、このコードを実行してみてください。
他にどんなシートがアクティブになっていても、「売上」シートの A1セルにだけ処理が行われるのが確認できるはずです!
このように、処理したいシートがはっきり決まっている場合は、「Worksheets(“名前”) 」での指定がもっとも確実です
② Worksheets(番号)
Worksheets(番号) は、シートの表示順に応じて指定する方法です。
「シート名が変わる可能性がある場合」や、「順番で管理している場合」に使われます。
Worksheets(1).Range("A1").Value = "これは1番目のシートです"
このコードは、一番左に表示されているシート(1番目)の A1セルに、「これは1番目のシートです」と入力する処理です。
複数のシート(例:Sheet1、Sheet2、Sheet3)を用意して、シートの順番を入れ替えてからこのコードを実行してみてください。
シートの名前が何であっても、「左から1番目のシート」に処理されることがわかるはずです!
このように、シート名が変わるリスクを避けたいときには、番号指定が便利です。
ただし、シートの並び順が変わると処理先も変わってしまうため、使いどころには注意しましょう。
③ ActiveSheet
ActiveSheet は、現在アクティブ(選択中)になっているシートを指します。
柔軟に使える一方で、どのシートが対象になるかは実行時の状態に依存するため注意が必要です。
ActiveSheet.Range("A1").Value = "これはアクティブなシートです"
このコードは、実行時に選択されているシートの A1セルに、「これはアクティブなシートです」と入力する処理です。
複数のシートを用意して、どのシートがアクティブな状態かを切り替えながら試してみてください。
実行するたびに、アクティブなシートだけが変更されるのがわかるはずです!
このように、ActiveSheet はユーザーが何か操作している前提の処理などに向いていますが、思わぬシートがアクティブになっているとミスの原因にもなるため、慎重に使いましょう。
シートの選択方法を理解したところで、次は操作方法を見ていきましょう!
■シートを操作する
実際に選択・追加・削除・名前変更・コピー/移動などの操作をマクロで行ってみましょう!
ここでは、よく使うシート操作を5つ、テンポよくご紹介していきます。
① シートを選択する(Worksheets(“名前”).Select)
Worksheets("集計").Select
このコードは、「集計」という名前のシートを画面上でアクティブに(=選択状態に)します。
Excel上でタブをクリックするのと同じ動作です。
Select を使うと、続けて ActiveSheet を使った処理などが行えるようになりますが、使いすぎるとコードが複雑になるため、基本はシート名を直接指定して操作する方法がおすすめです。
② シートを追加する(Worksheets.Add)
Worksheets.Add
このコードを実行すると、新しいワークシートが現在のアクティブシートの前に追加されます。
追加されたシートは自動的にアクティブ(選択状態)になります。
位置を指定して追加したい場合:
特定の位置に追加したい場合は、Before:= や After:= を使うことで指定ができます。
Worksheets.Add After:=Worksheets("集計")
の場合、「集計」シートの後ろに新しいシートが追加されます。
③ シートを削除する(Worksheets(“名前”).Delete)
Worksheets("集計").Delete
このコードは、「集計」という名前のシートを削除します。
実行すると削除確認のダイアログが表示され、OKを押すことで削除が実行されます。
自動で削除を完了したい場合:
マクロで自動的に削除したい場合は、削除確認ダイアログを非表示にする設定を一時的に入れると便利です。
Application.DisplayAlerts = False
Worksheets("集計").Delete
Application.DisplayAlerts = True
このコードではApplication.DisplayAlerts = Falseで一時的にダイアログを非表示とし、最後に元に戻しています。
ただし、確認なしで削除されて復活ができませんので、誤削除にはくれぐれもご注意ください!
④ シート名を変更する(Worksheets(“名前”).Name = “新しい名前”)
Worksheets("Sheet1").Name = "売上"
このコードは、「Sheet1」という名前のシートを「売上」という名前に変更します。
シート名に使えない記号が含まれていたり、すでに存在するシート名と同じ名前をつけたりするとエラーになるので、注意が必要です。
⑤ シートをコピー・移動する(Worksheets(“名前”).Copy / .Move)
シートをコピーする:
Worksheets("売上").Copy After:=Worksheets("集計")
このコードは、「売上」シートを「集計」シートの後ろにコピーします。
コピーされたシートは「売上 (2)」のような名前になります。
シートを移動する:
Worksheets("売上").Move Before:=Worksheets("入力")
このコードは、「売上」シートを「入力」シートの前に移動します。
元の場所から移るだけで、新しいシートは作成されません。
ワークシートの指定方法と操作方法をご説明しました。ワークブックと同じように、一連の流れで使えるように実践で覚えていきましょう!
4.よくあるエラーと対策
ここまでブックやシートの操作について学んできました。
ブックやシートを扱う処理では、「名前のミス」や「アクティブ状態の違い」などが原因で、エラーや意図しない動作が起きてしまうことがあります。
この章では、よくあるエラーとその原因・対策をご紹介していきます!
■シートやブックの名前が原因のエラー
よくあるエラー原因として、「指定したブック名やシート名が存在しない」ことが挙げられます。
例えば:
Worksheets("集計").Range("A1").Value = "OK"
「集計」シートがない状態でこのコードを実行すると、以下のようなエラーが出てきます。

シート名を間違えて設定していた、「集計」という名前のシートを消してしまっていた、などで「集計」シートが存在していないということです。
シート名をコード内に記述する際には、間違いがないようにコピペをしたり、二重にチェックしたりすることでエラーを未然に防止しましょう!
■︎Activeの指定ミスが原因のエラー
想定と違うブック・シートに処理がされてしまった場合、ActiveWorkbook や ActiveSheet、そして Worksheets(番号) の使い方が原因の可能性があります。
例えば:
ActiveWorkbook.Sheets(1).Range("A1").Value = "こんにちは"
このコードは、「今アクティブになっているブック」の1枚目のシートに処理を行います。Book1がアクティブと想定して書いていても、実行時にBook2がアクティブになっていた場合にはBook2に処理されてしまうことになります。
また、次のようなコードも似た落とし穴があります。
Worksheets(1).Range("A1").Value = "こんにちは"
これは「一番左のシート」に処理するコードですが、シートの並び順が変わっていると、違うシートが対象になる可能性があります。
特に、不特定多数の方が触るファイルでは気付かぬうちにシートの順番が変わっている場合もあるため、シート名等の他の方法での指定をするのがおすすめです!
■確認ダイアログが原因のエラー
マクロでシートを削除したり、ブックを閉じたりする処理を実行したときに、「この操作を実行してもよろしいですか?」といった確認メッセージが表示されて止まってしまうことがあります。
例えば:
ActiveWorkbook.Sheets(1).Range("A1").Value = "テスト"
ActiveWorkbook.Close
このコードは、アクティブなブックの1枚目のセルに「テスト」と書き込んだあと、そのブックを閉じる処理です。
このまま実行した場合、「保存しますか?(はい/いいえ/キャンセル)」というメッセージが表示されて、OKを押さないと次に進めない状態になります。
もし確認メッセージを出さずに処理したい場合は、保存するかどうかをコードであらかじめ指定しておきましょう:
ActiveWorkbook.Close SaveChanges:=True
実務でマクロを使っていると、初歩的な指定ミスが原因で意外なエラーに出くわすこともあります。
そんなときは焦らず、よくあるエラーのパターンを思い出して一つずつ確認していきましょう!
5.まとめ
今回は、Excelマクロでブックやシートを指定・操作するための基本を解説してきました。
■マクロの基本:オブジェクト同士をドットでつなげて操作!
マクロでは、「何を操作するか(=オブジェクト)」と「どんな操作をするか(=プロパティやメソッド)」をドット(.)でつないで命令します。
例えば、「集計」というファイルの「売上」シートの「A1セル」に処理をしたいときは、
Workbooks("集計").Worksheets("売上").Range("A1").Value =
のように、オブジェクト同士をドットでつなぐことで、意図した部品を正しく操作することができます。
どの部品に、どんな処理をするのか、をドットでつないで命令するのが、マクロの基本です!
■ブック操作をおさらい!
マクロでブックを操作する場面はとても多いです。
操作の種類と使い方を、ポイントと一緒に振り返っておきましょう:
操作内容 | コード | ポイント |
開く | Workbooks.Open | パスはフルで指定。Shift+右クリックで簡単にコピー可能 |
新規作成 | Workbooks.Add | 追加されたブックがその時点でのActiveWorkbookに |
上書き保存 | ActiveWorkbook.Save | すでに保存されているファイルなら、これだけでOK |
名前をつけて保存 | ActiveWorkbook.SaveAs | すでに保存されているファイルなら、これだけでOK |
閉じる | ActiveWorkbook.Close | 保存オプションは SaveChanges:=True などで指定可能 |
「開く」「作る」「保存する」「閉じる」など、基本の流れをおさえておくと実務でも役立ちます!
■シート操作をおさらい!
マクロでは、シートを直接操作する機会もとても多いです。
特定のシートを選択したり、新しく追加したり、削除・コピー・名前の変更などがよく使われる処理ですね。
シートについても操作の種類と使い方を、ポイントと一緒に振り返っておきましょう:
操作内容 | コード | ポイント |
選択する | Worksheets(“名前”).Select | 画面上でアクティブにする。Selectの多用は避けるのが吉 |
追加する | Worksheets.Add | 新しいシートをアクティブシートの前に追加 |
削除する | Worksheets(“名前”).Delete | 削除前の確認メッセージに注意(DisplayAlertsで制御可能) |
名前を変更する | Worksheets(“名前”).Name = “新しい名前” | 名前の重複・記号使用に注意 |
コピー/移動する | .Copy / .Move | Before / After で位置指定できる |
どの操作も、「どのシートに対して処理するか」をはっきり指定するのが大事なポイントですので、意識して書くようにしましょう。
■エラーを防ぐポイントをおさらい!
マクロのミスやエラーは、ちょっとした指定ミスや状態の違いから起こることがほとんどです。
よくある原因と対策をまとめておきましょう:
- シート名・ブック名は確実に!
→手入力せずコピペするか、二重チェックする習慣をつけましょう。 - ActiveWorkbook/ActiveSheet の使いすぎに注意!
→実行時の状態に依存しないよう、名前での指定が安心です。 - 共有ファイルでシート番号の指定は避けよう!
→共有ファイルでは並び順が変わると誤動作の原因になります。 - 確認メッセージでの一時停止に注意!
→削除や保存時は、メッセージ表示を制御するコードを入れるか、操作時に意識しておきましょう。
ちょっとした書き方の違いで意図しない結果になることがあるからこそ、「どのブック」「どのシート」に対して処理をするのかを明確に書くことが大切です。
今回ご紹介した指定の考え方と操作方法をしっかり身につけて、ミスを防ぎながら確実にマクロを書けるようになりましょう!
\ Excelマクロ制作も承っています /
各種クラウドソーシングサイトにて業務効率化ツールの作成・カスタマイズを承っております。
ご相談・お見積もりは無料ですので、まずはお気軽にご覧ください!