【Excel VBA】シート名・ブック名の指定について

Excel

ExcelのVBAにて、複数のシートが存在するブックや、複数のブックを同時に扱う場合に、シート名・ブック名を指定する方法を説明いたします。
また、シート名・ブック名を変数で指定する方法についても説明いたします。

はじめに

シート名・ブック名の指定に関して、気をつけておいたほうが良い点を書いておきます。

  1. RangeやCellsを扱う際は、シート名を指定するように習慣づけておく。
  2. 複数のブックを扱う際は、ブック名の指定も忘れないようにする。

どちらも言われてみれば当たり前なのですが、特に1.については、VBAで1つのシートしか触らないつもりでも、ブック内に複数のシートがある場合は、指定必須です。
なので、普段からシート名を指定するように、習慣づけておくと良いです。
※私はシート名の指定を忘れて、ブック内の他のシートを壊したことが何度あったことか・・・

シート名・ブック名の指定方法

シート名の指定

Sheets("Sheet1").Range("A1") = "あいうえお"
または
Worksheets("Sheet1").Range("A1") = "あいうえお"

ブック名の指定

Workbooks("Book1.xlsx").Sheets("シート名").Range("A1") = "あいうえお”
  • 指定されたブックは、開かれていることが前提です。
  • Sheets」は「Worksheets」でも可です。

開かれていないブックを使用する場合は、以下の方法でブックを開くことができます。

Workbooks.Open "ファイルのフルパス"

例:

Workbooks.Open "C:\Book1.xlsx"

VBAが記述されているブック(自分自身のブック)の指定

ThisWorkbook.Sheets("シート名").Range("A1") = "あいうえお"

シート名の指定方法の補足

シート名の指定方法として、上記の通り「Sheets」と「Worksheets」の2種類があります。
どちらを使うべきかですが、結論としては、どちらでも良いです。
違いは、以下の通りです。

  • Sheets:ワークシート以外にも、以下のシートを指定可能
    グラフシート(グラフ表示用のシート)
    モジュールシート(Excel4.0時代のマクロで使われていた)
    ダイアログシート(Excel95時代のマクロで使われていた)
  • Worksheets:ワークシートのみ指定可能

現在使われているのは「グラフシート」くらいかと思いますが、ワークシートとグラフシートに同じシート名を付けることは出来ませんし、グラフシートをVBAで操作することは、まれだと思います。
そのため、例えば「Sheetsにしておけば、コードが若干短くて済む」という理由で「Sheets」を使っても良いですし、「Sheetsだとグラフも混ぜて扱えてしまうので何となく気持ち悪い」という理由で「Worksheets」を使っても良いです。好みの問題でどちらでも良いかと思います。

シート名・ブック名を変数で指定する方法

上記の例の通り、シート名・ブック名を指定すると、コードが若干長くなり、場合によっては読みづらくなるかと思います。
そこで、「オブジェクト変数」というものを使う方法をご説明します。

シート名の指定方法

Sheetsの場合

Dim Sh1 As WorksheetSheetsではないので注意!
Set Sh1 = Sheets("Sheet1")

Sh1.Range("A1") = "あいうえお"

上記のように、オブジェクト変数の場合は、先頭に「Set」を書く必要があります。「=」で代入するだけではエラーになります。以下のWorksheets・Workbooksの場合も同様です。

Worksheetsの場合

Dim Sh2 As WorksheetWorksheetsではないので注意!
Set Sh2 = Worksheets("Sheet2")

Sh2.Range("A1") = "かきくけこ"

ブック名の指定方法

Dim Wb1 As WorkbookWorkbooksではないので注意!
Dim Sh3 As Worksheet

Set Wb1 = Workbooks("Book1.xlsx")
Set Sh3 = Wb1.Sheets("Sheet3")

Sh3.Range("A1") = "あいうえお"

ワークシート変数Sh3への代入時に、ワークブック変数Wb1を指定しているため、「Wb1.Sh3」のように書く必要はありません。(と言うより、「Wb1.Sh3」と書くとエラーになります。)

なお、ブック “Book1.xlsx” が開かれていない場合、以下の方法でブックを開くこととワークブック変数への代入を同時に行うことができます。

Dim Wb1 As Workbook

Set Wb1 = Workbooks.Open("C:\Book1.xlsx")   'カッコ内にファイルのフルパスを指定

まとめ

  • ExcelのVBAでは、RangeやCellsを使う場合に、シート名を指定するように習慣づけておくと良いです。
  • シート名・ブック名を指定するとコードが長くなるため、変数を使う方法もあります。

コメント

タイトルとURLをコピーしました