【VBA入門】WorksheetsからWorksheetオブジェクトを取得し操作する

ExcelVBAでは、WorksheetsコレクションからWorksheetオブジェクトを取得し操作することができます。

この記事では、WorksheetsコレクションからWorksheetオブジェクトを取得し操作する方法についてWorksheetオブジェクトとは何かやWorksheetオブジェクトで出来ること一覧、Worksheetオブジェクトを取得する方法といった基本的な内容から

  • Activateでワークシートを切り替える方法
  • Copyメソッドでワークシートをコピーする方法
  • WorksheetFunctionについて

など応用的な使い方についても解説していきます。ワークシートをコピーする方法を使用することで書類の作成を効率的に行うことができます。例えば、全てのワークシートの元となるテンプレートを用意しておき、コピーして各ワークシートを作成するといった具合です。

それでは、例を交えながら詳しく解説していきます。

Worksheetオブジェクトとは

次の画像は、Excelで空のブックを作成したときのものです。(※説明のために、赤枠や青矢印を追加しています。)

vba_worksheets11 0

画像:ワークシート

画面下部に表示されているものがワークシートの見出しです。ワークシートの本体は、赤枠で囲まれた部分です。このワークシートをExcelVBAでは、Worksheetオブジェクトとして扱っています。

Worksheetsコレクションとの違いについて

先ほどはWorksheetオブジェクトについて説明しました。これによく似た用語でWorksheetsというものがあります。Excelではワークシートのほかにも、いろいろなシートがあります。

例えば、グラフシートや、マクロシート、ダイアログシートなどのシートがあります。

Worksheets01

画像:挿入画面

VBAでは、シートはSheetオブジェクトとして扱います。そのSheetオブジェクトの集合体がSheetsコレクションです。同じように、VBAではワークシートをWorksheetオブジェクトとして扱います。

そして、Worksheetオブジェクトの集合体がWorksheetsコレクションです。

Worksheetオブジェクトで出来ること一覧

Worksheetオブジェクトにはイベント、メソッド、プロパティがあります。これらを使ってVBAでワークシートを操作します。イベント、メソッド、プロパティについて解説し、それぞれ代表的なものを表にまとています。

イベント一覧

代表的なイベントについては下の表のとおりです。

名前説明使用例
Activateブック、ワークシート、グラフ シート、または埋め込みグラフがアクティブになったときに発生Worksheet_Activate()
BeforeDeleteワークシートが削除される前に発生Worksheet_BeforeDelete()
BeforeDoubleClickワークシートをダブルクリックしたときに発生Worksheet_BeforeDelete(ByVal Target As Range, Cancel As Boolean)
BeforeRightClickワークシートを右クリックしたときに発生Worksheet_BeforeRightClick(TyVal Target As Range, Cancel As Boolean)
Calculateワークシートを再計算した後に Worksheet オブジェクトで発生Worksheet_Calculate()
Changeワークシートのセルが変更されたときに発生Worksheet_Change(ByVal Target as Range)
Deactivateグラフ、ワークシート、またはブックが非アクティブになったときに発生Workbook_Deactivate()
SelectionChangeワークシートで選択範囲を変更したときに発生Worksheet_SelectionChange(ByVal Target As Range)

メソッド一覧

代表的なメソッドについては下の表のとおりです。

名前説明使用例
Activate指定されたシートをアクティブに変更Worksheets("Sheet1").Activate
Calculateワークシート内の指定されたセル範囲で計算を実行Worksheets("Sheet1").Rows(2).Calculate
CopyシートのコピーWorksheets("Sheet1").Copy After:=Worksheets("Sheet3")
Deleteシートの削除Worksheets("Sheet1").Delete
Moveシートをブック内の他の場所へ移動Worksheets("Sheet1").Move after:=Worksheets("Sheet3")
Pasteクリップボードの内容をシートに貼り付けWorksheets("Sheet1").Paste Destination:=Worksheets("Sheet1").Range("D1:D5")
PasteSpecial指定された形式で、クリップボードの内容をシートに貼り付けWorksheets("Sheet1").PasteSpecial format:= _
"Microsoft Word 8.0 Document Object"
PrintOutシートの印刷Worksheets("Sheet1").PrintOut
PrintPreviewシートの印刷プレビューを表示Worksheets("Sheet1").PrintPreview
Protectワークシートの保護、変更不可Worksheets("Sheet1").Protect Password:="pass"
SaveAsグラフまたはワークシートへの変更を別のファイルに保存Worksheets("Sheet1").SaveAs Filename:="Sample.xls"
Selectシートを選択Worksheets("Sheet2").Select Replace:=False
Unprotectシートまたはブックの保護を解除Worksheets("Sheet1").Unprotect Password:="pass"

プロパティ一覧

代表的なプロパティについては下の表のとおりです。

名前説明使用例
Cellsセルを表すRangeオブジェクトを返すWorksheets("Sheet1").Cells(5, 3).Font.Size = 14
Columns列を表すRangeオブジェクトを返すWorksheets("Sheet1").Columns(2).ClearContents
Indexシートのインデックス番号Worksheets("Sheet1").Index
Nameシート名ActiveSheet.Name
Namesすべてのワークシートの名前を表すNamesコレクションを返すWorksheets("Sheet1").Names.ColorIndex = 3
Rangeセルまたはセル範囲を表すRangeオブジェクトを返すWorksheets("Sheet1").Range("A1").Value
Rows行を表すRangeオブジェクトを返すWorksheets("Sheet1").Rows(3).Delete
Visibleシートの表示、非表示Worksheets("Sheet1").Visible = False

Worksheetオブジェクトを取得する方法

Worksheetオブジェクトを取得するためには、を使用します。Worksheetsコレクションには、見出しの順番でWorksheetオブジェクトが割り当てられます。

例えば、次の画像のような場合はSheet2, Sheet1, Sheet3の順番になります。

vba_worksheets21 0

画像:ワークシート

WorksheetsコレクションからWorksheetオブジェクトを取得するためには、次のように2通りの方法があります。

インデックス番号を指定して取得する方法

インデックス番号を指定してWorksheetオブジェクトを取得するためには、次のように記述します。

次のサンプルコードでは、1番目のワークシートを取得するためにSet ws = Worksheets(1)としています。

vba_worksheets22 0

画像:実行前

vba_worksheets23 0

画像:実行後

確認のため、取得したワークシートの名前をメッセージボックスで表示しています。WorksheetオブジェクトのNameプロパティを使ってワークシートの名前を取得しています。

実行結果の画像から1番目のワークシートを取得できていることが確認できます。

ワークシート名を指定して取得する方法

ワークシート名を指定してWorksheetオブジェクトを取得するためには、次のように記述します。

次のサンプルコードでは、Sheet2を取得するためにSet ws = Worksheets("Sheet2")としています。

vba_worksheets22 0

画像:実行前

vba_worksheets33 0

画像:実行後

確認のため、取得したワークシートの名前をメッセージボックスで表示しています。WorksheetオブジェクトのNameプロパティを使ってワークシートの名前を取得しています。実行結果の画像からSheet2を取得できていることが確認できます。

Activateでワークシートを切り替える方法

アクティブシートを切り替えるにはActivateメソッドを使います。サンプルコードで確認しましょう。

Worksheets02

画像:実行結果

WorksheetオブジェクトのActivateメソッドでアクティブシートを切り替えて、Nameプロパティでアクティブシートの名前を取得しています。

Copyメソッドでワークシートをコピーする方法

例えば、次のようなテンプレートとなるワークシートをコピーして書類を作成したいとします。

vba_worksheets41 0

画像:サンプル

Copyメソッドでワークシートをコピーするためには、次のように記述します。

vba_worksheets42 0

画像:サンプルをコピー

テンプレートとなるワークシートを取得するためにSet ws = Worksheets("テンプレート")としています。このサンプルコードでは、ws.Copy Before:=wsとして、Beforeパラメータを指定することでテンプレートの前にコピーを作成しています。

同様にワークシートの後ろにコピーするためのAfterパラメータも用意されています。実行結果からワークシートがコピーされていることが確認できます。さらに、コピーしたシートの名前を変更したいことがあります。

そのような場合、次のサンプルコードのように記述します。

vba_worksheets43 0

画像:実行結果

コピー時にアクティブシートが切り替わることを利用し、ActiveSheet.Name = "シート"とすることでコピーしたワークシートの名前を変更しています。ワークシートの名前を変更するために、WorksheetオブジェクトのNameプロパティで値を変更しています。

実行結果の画像からシート見出しに表示されるワークシートの名前が変更されていることを確認できます。

WorksheetFunctionについて

ApplicationオブジェクトのWorksheetFunctionプロパティというものがあります。Worksheetオブジェクトと呼び名が似ていますが、Worksheetオブジェクトを操作するものではありません。

WorksheetFunctionプロパティはVBAからワークシート関数を呼び出す場合に使います。ワークシート関数とはExcelシート上のセルに入力する関数のことです。

WorksheetFunctionプロパティの使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

【VBA入門】関数の使い方(VBA関数一覧、ワークシート関数の入力)
更新日 : 2019年4月28日

まとめ

いかがでしたか?今回は、ExcelVBAでWorksheetsからWorksheetオブジェクトを取得し、操作する方法について解説しました。テンプレートとなるワークシートをコピーして、新しいワークシートを作成することで書類作成を効率化することができますね。

もし、ExcelVBAでWorksheetsからWorksheetオブジェクトを取得し、操作することがあればこの記事を思い出してみてください!。

Excel VBAを最短で習得したい方へ

元々ITリテラシーの高い方やプログラムの学び方がわかっている方であれば、この記事通りに進めていけば、Excel VBAを独学で習得することができるでしょう。

ただし、実際の学習期間中はつまづいている時間がほとんどです。

「なかなかやり遂げられ無い、挫折してしまった」
「時間が足りない」
「情報が少なくどう調べればいいかわからない」
「エラーを解決することができない」

このような悩みを抱えている方も少なく無いと思います。

  • もう挫折したくない
  • 本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい
  • 自分だけのカリキュラムで効率的に勉強したい
そんな方はお気軽に侍エンジニア塾までご相談ください。

お一人お一人に専属のインストラクターがつくので、より深くExcel VBAについて学習することできます。

まずは『無料体験レッスン』で、弊社のコンサルタントと一緒にあなた専用の学習方やカリキュラムを考えてみませんか?

Excel VBAならではの学習方法や、現役エンジニアから貴重なアドバイスを受けることができます。

詳しくは下の画像をクリックして弊社サービス内容をご確認ください。

cta2_vba2

LINEで送る
Pocket

書いた人

イシキ マコト

イシキ マコト

フリーランスのエンジニアです。
最近では、プログラミング関連の記事を作成するライターとしても活動しています。

趣味と業務の両方でプログラミング言語をいくつも学んできたので
その経験を活かして分かりやすい記事を作成できればと考えています。

おすすめコンテンツ

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

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