EB000005_VBAエキスパート(ExcelVBAベーシック)合格講座/第五回:ブックとシートのオブジェクト

VBAエキスパート(ExcelVBAベーシック)合格講座/第五回:ブックとシートのオブジェクト ExcelVBA Basic
  1. このページの内容について
  2. オブジェクト
    1. オブジェクトとは
    2. 機能(メソッド)
      1. メソッドとは
      2. メソッドの呼び出し方
      3. サンプルコード(クリックでコピー)
      4. オブジェクトの省略
    3. 状態(プロパティ)
      1. プロパティとは
      2. プロパティの確認方法
      3. サンプルコード(クリックでコピー)
    4. コレクション
      1. コレクションとは
      2. コレクションの例
      3. コレクションの参照方法
        1. サンプルコード(クリックでコピー)
        2. 実行結果
      4. コレクションもオブジェクト
        1. サンプルコード(クリックでコピー)
        2. 実行結果
  3. ブックオブジェクト
    1. ブックの指定方法
      1. ThisWorkbook
      2. ActiveWorkbook
      3. Workbooks
        1. ファイル名による指定
        2. インデックスによる指定
    2. ブックの操作
      1. ブックの新規作成(Addメソッド)
        1. サンプルコード(クリックでコピー)
        2. 実行結果
      2. ブックを開く(Openメソッド)
        1. サンプルコード(クリックでコピー)
        2. 実行結果
      3. ブックの保存(Saveメソッド、SaveAsメソッド)
        1. 上書き保存
          1. サンプルコード(クリックでコピー)
          2. 実行結果
        2. 名前を付けて保存
          1. サンプルコード(クリックでコピー)
          2. 実行結果
      4. ブックの保存状態をしらべる(Savedプロパティ)
        1. サンプルコード(クリックでコピー)
        2. 実行結果
      5. ブックを閉じる(Closeメソッド)
        1. 保存して閉じる
          1. サンプルコード(クリックでコピー)
          2. 実行結果
        2. 保存せず閉じる
          1. サンプルコード(クリックでコピー)
          2. 実行結果
  4. シートオブジェクト
    1. シートの指定方法
      1. オブジェクト名による指定
      2. ActiveSheet
      3. Worksheets、Sheets
        1. シート名による指定
        2. インデックスによる指定
    2. シートの操作
      1. シートの挿入(Addメソッド)
        1. サンプルコード(クリックでコピー)
        2. 実行結果
      2. シートをアクティブにする(Selectメソッド、Activateメソッド)
        1. サンプルコード(クリックでコピー)
        2. 実行結果
      3. シート名の取得・変更(Nameプロパティ)
        1. サンプルコード(クリックでコピー)
        2. 実行結果
      4. シートを削除する(Deleteメソッド)
        1. 警告して削除する
          1. サンプルコード(クリックでコピー)
          2. 実行結果
        2. 警告せずに閉じる
          1. サンプルコード(クリックでコピー)
          2. 実行結果
      5. シートの表示・非表示(Visibleプロパティ)
        1. サンプルコード(クリックでコピー)
        2. 実行結果
      6. シートの移動またはコピー(Moveメソッド、Copyメソッド)
        1. サンプルコード(クリックでコピー)
        2. 実行結果
  5. 【PR】VBAエキスパート試験対策記事

このページの内容について

このページは、VBAエキスパート(ExcelVBAベーシック)試験合格講座の第五回記事です。公式テキスト第4章「VBAの構文」と第9章「シートとブックの操作」の内容について解説します。1時間の講義でお話する程度の分量です。講座受講者の復習での利用を想定しています。

オブジェクト

オブジェクトとは

VBAにおいてオブジェクトとは「機能(メソッド)」と「状態(プロパティ)」の集合体のことを指します。

機能(メソッド)

メソッドとは

メソッドとは関数のようなもので引数を渡して戻り値を得たり、呼び出すことでなにか動作やアクションが発生したりします。

メソッドの呼び出し方

オブジェクトの中のメソッドを呼び出す(使用する)ためには、「オブジェクト名.メソッド名」と記述します。引数がある場合は続けて「()」内に記述します。

サンプルコード(クリックでコピー)

Private Sub Test_Method()
Call VBA.MsgBox("「VBA」というオブジェクトのメソッドである「MsgBox」を呼び出してメッセージを表示します。")
End Sub

オブジェクトの省略

ExcelVBA(マクロ)では一部のオブジェクトは省略して記載することができます。上記のMsgBox関数はメッセージボックスを表示させるVBAに備え付けの関数ですが、実体は「VBA」というオブジェクトに含まれるメソッドです。しかしこの「VBA」というオブジェクトは特別に省略して記述することが認められており「MsgBox」と記述すると、マクロ実行時に「VBA」オブジェクトであることを自動で判定し実行されます。

状態(プロパティ)

プロパティとは

プロパティとはオブジェクトの持っている値のことです。また、オブジェクトの中にはオブジェクトが入れ子構造で入っていることもあります。便宜上、オブジェクトの中のオブジェクトもプロパティに分類されます。

プロパティの確認方法

メソッドと同様「オブジェクト名.プロパティ名」で参照することができます。

サンプルコード(クリックでコピー)

Private Sub Test_Property()
Debug.Print ThisWorkbook.Name
End Sub

コレクション

コレクションとは

コレクションとは同じオブジェクトの集合体のことです。

コレクションの例

「ThisWorkbook」オブジェクトには「WorkSheets」という「WorkSheet」オブジェクトの集合体が含まれています。

コレクションの参照方法

コレクションはオブジェクトの集合体なので、コレクションの中のオブジェクトを特定してメソッドやプロパティを呼び出すことができます。「コレクション名(インデックス)」でオブジェクトを特定します。

サンプルコード(クリックでコピー)
Private Sub Test_Collection()
Debug.Print ThisWorkbook.Worksheets(1).Name
End Sub
実行結果

上記サンプルでは「ThisWorkbook」の「WorkSheets」コレクションの一番目のオブジェクトの「Name」プロパティを取得・表示しています。

コレクションもオブジェクト

ややこしいポイントですが、コレクションもオブジェクトの一種です。そのためコレクション自体もメソッドとプロパティを持っています。

サンプルコード(クリックでコピー)
Private Sub Test_Collection2()
Call ThisWorkbook.Worksheets.Add
Debug.Print ThisWorkbook.Worksheets.Count
End Sub
実行結果

上記サンプルでは「ThisWorkbook」の「WorkSheets」コレクションの「Add」メソッドにより、ブックへシートを追加し、その後「Count」プロパティでWorkSheetオブジェクトの数を取得・表示しています。

コレクションは必ずしも複数のオブジェクトが含まれているとは限りません。現在のExcelのデフォルト設定では、ブックを立ち上げた時点でシートは1つしかありません。そのため、WorkSheetsコレクションの中にもWorkSheetオブジェクトは1つしか入っていない状態です。

ブックオブジェクト

ブックの指定方法

ThisWorkbook

マクロが動作しているブックは「ThisWorkbook」で指定することができます。このオブジェクトはプロジェクトエクスプローラーから目視できます。

ActiveWorkbook

操作中(アクティブな)ブックのことです。アクティブなブックはマクロ動作中にユーザーの操作によって変更されることがあります。

Workbooks

上記以外のブックはWorkbooksコレクションからアクセスできます。

ファイル名による指定

拡張子付きのファイル名を文字列で指定します。新規作成された未保存のブックでは拡張子は付けません。

Workbooks("abc.xlsx")
Workbooks("Book1")
インデックスによる指定

ブックオブジェクトはExcelによって開かれた順番でインデックスが振られています。最初のブックは「1」です。

Workbooks(1)

Workbooksコレクションは最上位のオブジェクトではありません。ブックやシートの最上位のオブジェクトは「Excel」です。

ブックの操作

ブックの新規作成(Addメソッド)

サンプルコード(クリックでコピー)
Private Sub Test_WorkbooksAdd()

Call Workbooks.Add

End Sub
実行結果

上記サンプルコードを実行すると新しいブックが一つ作成されます。

ブックを開く(Openメソッド)

サンプルコード(クリックでコピー)
Private Sub Test_WorkbooksOpen()

Call Workbooks.Open(ThisWorkbook.Path & "\" & ThisWorkbook.Name)

End Sub
実行結果

上記サンプルコードを実行すると実行中のマクロが記述されているブックを開こうとします。つまり現在のExcelの仕様上、何も起きません。なお、保存されていないブック上で動作している場合は、エラーとなります。

引数の指定方法

Openメソッドは非常に引数の多いメソッドです。

Workbooks.Open(Filename As String, [UpdateLinks], [ReadOnly], [Format], [Password], [WriteResPassword], [IgnoreRealOnlycommended], [Origin], [Delimiter],[Editable], [Notify], [Converter], [AddToMru], [Local], [CorruptLoad])

必須項目はFilename必須項目は「Filename」のみですが、例えばパスワード付ファイルを開く場合は「Password」を指定するとマクロの動作を止めません。このように一部の引数をとびとびに指定する場合は、以下のように記述することができます。

Workbooks.Open(Filename:="●●●",Password:="xxx")

ブックの保存(Saveメソッド、SaveAsメソッド)

上書き保存
サンプルコード(クリックでコピー)
Private Sub Test_WorkbookSave()

Call Workbooks(1).Save

End Sub
実行結果

上記サンプルコードを実行すると、ブックを上書き保存します。未保存のブックであれば保存のメッセージが立ち上がります。

名前を付けて保存

名前を付けて保存する場合、ファイル名を含むパスを指定します。

サンプルコード(クリックでコピー)
Private Sub Test_WorkbookSaveAs()

Call Workbooks(1).SaveAs(ThisWorkbook.Path & "\sample.xlsx")

End Sub
実行結果

上記サンプルコードを実行すると、1番目のブックに名前を付けて、マクロが動作中のブックと同じ階層に保存します。※マクロブックが保存されていないとエラーになります。

ブックの保存状態をしらべる(Savedプロパティ)

サンプルコード(クリックでコピー)
Private Sub Test_WorkbookSaved()

Debug.print ActiveWorkbook.Saved

End Sub
実行結果

アクティブブックが保存されている状態をイミディエイトウィンドウに出力します。True・・保存済、False・・未保存(編集が保存されていない状態)

ブックを閉じる(Closeメソッド)

保存して閉じる
サンプルコード(クリックでコピー)
Private Sub Test_WorkbookCloseTrue()

Call Workbooks(1).Close(True)

End Sub
実行結果

上記サンプルコードを実行すると、1番目のブックを保存してから閉じます。マクロを実行中のブックであっても閉じられます。

保存せず閉じる
サンプルコード(クリックでコピー)
Private Sub Test_WorkbookCloseFalse()

Call Workbooks(1).Close(False)

End Sub
実行結果

上記サンプルコードを実行すると、1番目のブックを保存せずに閉じます。

Closeは何も指定しないと「True」が指定されたものとみなします。

シートオブジェクト

シートの指定方法

オブジェクト名による指定

ブックには「ThisWorkbook」という最初から存在するブックオブジェクトがありました。シートにも同じようにオブジェクトが事前に用意されています。作成されたままの状態だと「Sheet1」「Sheet2」のような連番になっていますが、これでは管理がしづらいので、プロパティウィンドウでオブジェクト名を変更して管理します。下記の画像では「wsRieki」や「wsUriage」というオブジェクト名をマクロで使用できます。

ActiveSheet

操作中(アクティブな)シートのことです。アクティブなシートはマクロ動作中にユーザーの操作によって変更されることがあります。

Worksheets、Sheets

上記以外にはWorksheetsコレクションとSheetsコレクションからアクセスできます。

シート名による指定

シート名を文字列で指定します。

Worksheets("Sheet1")
Sheets("Sheet1")

Excelのシートには通常のセルが配置されたシートをワークシート、グラフのみのシートをグラフシートと呼びます。Sheetsはすべての種類のシートを指しており、Worksheetsはワークシートのみを指します。

インデックスによる指定

シートオブジェクトは左から何番目かのシートの位置でインデックスが振られています。

Worksheets(1)
Sheets(1)

シートの操作

シートの挿入(Addメソッド)

引数働き
[Before] シートを指定するとそのシートの前にシートを挿入する。指定しないと操作中のシートを指定したことになる。
[After]シートを指定するとそのシートの後にシートを挿入する。指定しないとBeforeを指定したことになる。
[Count]数値を指定するとその数だけシートを挿入する。指定しないと「1」。
[Type]シートのタイプを指定する。指定しないと「ワークシート」を挿入する。

いずれの引数も大カッコ[]で囲まれていますが、これは引数が省略可能であることを意味します。

BeforeとAfterを同時に指定することはできません。エラーになります。

サンプルコード(クリックでコピー)
Private Sub Test_WorksheetsAdd()

Call Worksheets.Add(After:=ThisWorkbook.Worksheets(1), Count:=1)

End Sub
実行結果

上記サンプルコードを実行するとマクロが動作中のブックの1番目のシートの「後」に「1」つのシートを挿入します。

シートをアクティブにする(Selectメソッド、Activateメソッド)

サンプルコード(クリックでコピー)
Private Sub Test_WorksheetActivate()

Call ThisWorkbook.Worksheets(1).Activate

End Sub

Private Sub Test_WorksheetSelect()

Call ThisWorkbook.Worksheets(1).Select

End Sub
実行結果

上記サンプルコードはマクロが動作しているブックの1番目のシートをアクティブにします。ActivateもSelectそれぞれ同じ結果となります。

複数シートを選択した状態でそのなかの1つのシートをSelectすると選択状態は解除されますが、Activateで実行すると選択状態は解除されません。

シート名の取得・変更(Nameプロパティ)

サンプルコード(クリックでコピー)
Private Sub Test_WorksheetName()

Debug.Print ThisWorkbook.Worksheets(1).Name
ThisWorkbook.Worksheets(1).Name = "テスト"

End Sub
実行結果

上記サンプルコードを実行すると、マクロが動作しているブックの1番目のシート名をイミディエイトウィンドウに出力します。その後、シート名を「テスト」へ変更します。

シートを削除する(Deleteメソッド)

警告して削除する
サンプルコード(クリックでコピー)
Private Sub Test_WorksheetDelete()

Call ThisWorkbook.Worksheets(1).Delete

End Sub
実行結果

上記サンプルコードを実行すると、マクロが動作しているブックの1番目のシートを削除します。ただし手動で削除する時と同じ下記の警告が表示され入力されるまでマクロの動作は停止します。

警告せずに閉じる

「Application.DisplayAlert」というExcelのプロパティを変更することで、Excelからの警告メッセージを表示しないようにすることができます。そのため、下記のサンプルでは事前の警告なくシートの削除が実行されます。

サンプルコード(クリックでコピー)
Private Sub Test_WorksheetDeleteUnAlert()

Application.DisplayAlerts = False
Call ThisWorkbook.Worksheets(1).Delete
Application.DisplayAlerts = True

End Sub
実行結果

上記サンプルコードを実行すると、マクロが動作しているブックの1番目のシートを削除します。警告はありません。

シートの表示・非表示(Visibleプロパティ)

サンプルコード(クリックでコピー)
Private Sub Test_WorksheetVisible()

ThisWorkbook.Worksheets(1).Visible = False

End Sub
実行結果

上記サンプルコードを実行すると、マクロが動作しているブックの1番目のシートを非表示にします。

すべてのシートを非表示にすることはできません。

シートの移動またはコピー(Moveメソッド、Copyメソッド)

引数働き
[Before] シートを指定するとそのシートの前にシートを移動またはコピーする。指定しないと操作中のシートを指定したことになる。
[After]シートを指定するとそのシートの後にシートを移動またはコピーする。指定しないとBeforeを指定したことになる。
サンプルコード(クリックでコピー)
Private Sub Test_WorksheetCopy()

Call ThisWorkbook.Worksheets(1).Copy(Before:=ThisWorkbook.Worksheets(1))
Call ThisWorkbook.Worksheets(1).Move(After:=ThisWorkbook.Worksheets(2))

End Sub
実行結果

上記サンプルコードを実行するとマクロが動作中のブックの1番目のシートを1番目のシートの前に「コピー」します。その後、1番目のシートを2番目のシートの後に「移動」します。

MoveメソッドとCopyメソッドの引数は省略すると、新しいブックにシートを移動(コピー)します。

【PR】VBAエキスパート試験対策記事

当サイトでは、オデッセイコミュニケーションズ社が運営する試験であるVBAエキスパートExcel VBA ベーシックExcel VBA スタンダード)の出題範囲をベースに用語や各種関数の解説などを行っています。試験合格に向けて必須と言われる公式テキストに沿って解説をしています。受験をするか悩んでいる方、テキストとは別視点の解説を見てみたい方、受験はしないがExcelVBA(マクロ)に興味がある方へ向けた記事です。

Comment