Categories: excel

VBAでExcelのシート名を取得する方法|初心者でもわかるコード例付き解説

ExcelのVBA(Visual Basic for Applications)は、手作業を自動化できる便利なツールです。
中でも「シート名の取得」は、複数シートを扱う作業でよく使われる基本的な操作のひとつです。

この記事では、VBAで現在のシート名を取得する基本的な方法から、すべてのシート名を一覧にして取得する応用例まで、初心者の方でも理解できるように丁寧に解説します。
実際にコピペして使えるコード例付きで解説していますので、ぜひ実務や学習に活用してください。


VBAでシート名を取得する基本

まずは、現在アクティブになっているシートの名前を取得する最も基本的な方法をご紹介します。

Sub GetActiveSheetName()
MsgBox ActiveSheet.Name
End Sub

このコードを実行すると、現在アクティブなシートの名前がメッセージボックスで表示されます。
この「ActiveSheet.Name」が、VBAでシート名を取得する最も基本的な書き方です。


特定のシートの名前を取得する

アクティブなシートではなく、特定のシート(たとえば1番目のシート)の名前を取得したい場合は、以下のように書きます。

Sub GetFirstSheetName()
MsgBox Worksheets(1).Name
End Sub

Worksheets(1) は、Excelファイル内の1番目のシートを指します。
番号ではなく、名前で直接指定することも可能です。

Sub GetSheetNameByIndex()
Dim sheetName As String
sheetName = Worksheets("売上データ").Name
MsgBox sheetName
End Sub

すべてのシート名を一覧で取得する

ブック内のすべてのシート名を順番に取得したい場合は、ループ処理を使います。
以下は、その具体例です。

Sub GetAllSheetNames()
Dim ws As Worksheet
Dim allNames As String

For Each ws In Worksheets
allNames = allNames & ws.Name & vbCrLf
Next ws

MsgBox allNames
End Sub

このコードを実行すると、すべてのシート名がメッセージボックスで改行付きで表示されます。
処理結果をセルに書き出すことも可能です。


シート名をセルに書き出す

取得したシート名を、Excelのセルに一覧として書き出すには、以下のようにします。

Sub OutputSheetNamesToCells()
Dim i As Integer
Dim ws As Worksheet

i = 1
For Each ws In Worksheets
Sheets("一覧").Cells(i, 1).Value = ws.Name
i = i + 1
Next ws
End Sub

このコードでは、「一覧」という名前のシートのA列に、すべてのシート名が1行ずつ書き出されます。
実行前に「一覧」シートを作成しておいてください。


現在のシートが何番目かを調べる

たとえば「このシートは何番目?」という情報も知りたい場合、以下のようにします。

Sub GetSheetIndex()
MsgBox ActiveSheet.Index
End Sub

このコードで、現在のシートが何番目か(左から何番目か)を取得できます。


シート名を配列に格納して使う

取得したシート名を配列に格納して処理を行いたいケースもあります。
たとえば、特定の名前のシートだけを対象に何か処理したいときなどに便利です。

Sub StoreSheetNamesInArray()
Dim sheetNames() As String
Dim i As Integer
Dim ws As Worksheet

ReDim sheetNames(Worksheets.Count - 1)

i = 0
For Each ws In Worksheets
sheetNames(i) = ws.Name
i = i + 1
Next ws

' 配列の中身を確認する(例:デバッグウィンドウに表示)
For i = LBound(sheetNames) To UBound(sheetNames)
Debug.Print sheetNames(i)
Next i
End Sub

シート名の条件付き取得(特定の文字列を含むなど)

シート名の中に特定のキーワードが含まれているものだけを抽出するには、InStr関数を使います。

Sub FindSheetByKeyword()
Dim ws As Worksheet
Dim keyword As String
keyword = "月報"

For Each ws In Worksheets
If InStr(ws.Name, keyword) > 0 Then
MsgBox "見つかりました:" & ws.Name
End If
Next ws
End Sub

このようにすれば、「月報」という文字列が含まれるシート名を見つけて知らせることができます。


ワークブック内のシート数を調べる

最後に、シートの数そのものを知りたい場合の方法も押さえておきましょう。

Sub CountSheets()
MsgBox "シート数は " & Worksheets.Count & " です。"
End Sub

まとめ

VBAを使ってシート名を取得する方法は、実務でもよく使う重要なテクニックです。
基本的な ActiveSheet.Name の使い方から、ループや配列を使った応用まで、さまざまな場面に応用できます。

今回の記事で紹介したコードはすべてそのままコピーして使えるので、ぜひ試してみてください。
さらに実務で活かすためには、「条件付きの抽出」「書き出し先の指定」「別ブックの操作」なども合わせて学習するとより効果的です。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。