課題・悩み「Excelのシート名の変更をラクに行いたい」
解決策「Excelに入力されたデータをもとに、Excelのシート名を一括で変更するVBAマクロ」を解説
Excelの複数のシート名を変更したい!けど、1つ1つ変更するのは時間がかかる…
そこで、入力したデータをもとに、Excelのシート名を一気に変更するVBAマクロを作成しました。
ボタンを押すだけで、シート名を一括変更できます。
【Excelに入力されたデータをもとに、Excelのシート名を一括で変更するVBAマクロ】を図解で解説しています。
VBAマクロファイルを配布中。
以下のボタンよりダウンロードしてください。
VBAマクロでExcelのシート名を変更する方法
.Name プロパティはVBA(Visual Basic for Applications)でよく使われるプロパティの一つです。
Excelのシート名を参照したり変更したりする際に使用します。
.Nameプロパティでシート名を変更する
このコードの意味は、”Sheet1″と名付けられたシートの名前を”新しいシート名”に変更する、というものです。
Sheets("Sheet1").Name = "新しいシート名"
.Nameプロパティでシート名を変更する
- Sheets(“Sheet1”) は “Sheet1” という名前のシートを指定しています。
- .Name はそのシートの名前を取得または設定するプロパティです。
- “新しいシート名” は新しく設定するシート名です。
Sub ChangeSheetName()
Sheets("Sheet1").Name = "新しいシート名"
End Sub
Excelに入力されたデータをもとに、Excelのシート名を一括で変更するVBAマクロファイルの使い方
Excelに入力されたデータをもとに、Excelのシート名を一括で変更するVBAマクロファイルの使い方
- シート名を取得する
- シート名の変更
- 入力データの削除
シート名を取得する
【シート名の取得】ボタンをクリック
![Excelに入力されたデータをもとに、Excelのシート名を一括で変更するVBAマクロシート名を取得する【シート名の取得】ボタンをクリックの画像](https://www.chemi-jyo.com/work/wp-content/uploads/2023/08/vba_sheet_name_change_1.png)
VBAマクロファイルの【シート名の取得】のボタンをクリックします。
シート名を取得する
- 【シート名の取得】ボタンをクリック
- Excelを選択
- シート名の表示
- シート名の入力
Excelを選択
![Excelに入力されたデータをもとに、Excelのシート名を一括で変更するVBAマクロExcelを選択の画像](https://www.chemi-jyo.com/work/wp-content/uploads/2023/08/vba_sheet_name_change_2.png)
ダイアログボックスから、シート名を変更したいExcelを選択して【OK】をクリックします。
シート名の表示
![Excelに入力されたデータをもとに、Excelのシート名を一括で変更するVBAマクロシート名の表示の画像](https://www.chemi-jyo.com/work/wp-content/uploads/2023/08/vba_sheet_name_change_3.png)
選択したExcelのシート名が一覧で、VBAマクロファイルのB列に表示されました。
シート名の変更
シート名の入力
![Excelに入力されたデータをもとに、Excelのシート名を一括で変更するVBAマクロシート名の変更シート名の入力の画像](https://www.chemi-jyo.com/work/wp-content/uploads/2023/08/vba_sheet_name_change_4.png)
VBAマクロファイルの対応するC列に、変更したいシート名を入力します。
シート名の変更
- シート名の表示
- シート名の入力
- 【シート名の変更】ボタンをクリック
- シート名の変更完了
- 【入力データ削除】をクリック
【シート名の変更】ボタンをクリック
![Excelに入力されたデータをもとに、Excelのシート名を一括で変更するVBAマクロ【シート名の変更】ボタンをクリックの画像](https://www.chemi-jyo.com/work/wp-content/uploads/2023/08/vba_sheet_name_change_5.png)
VBAマクロファイルの【シート名の変更】のボタンをクリックします。
シート名の変更完了
シート名が変更されました。
入力データの削除
【入力データ削除】をクリック
![Excelに入力されたデータをもとに、Excelのシート名を一括で変更するVBAマクロ入力データの削除【入力データ削除】をクリックの画像](https://www.chemi-jyo.com/work/wp-content/uploads/2023/08/vba_sheet_name_change_6.png)
VBAマクロファイルの【入力データ削除】をクリックすると、B列とC列のデータが削除されます。
Excelに入力されたデータをもとに、Excelのシート名を一括で変更するVBAマクロのQ&A
- VBAを使用してExcelのシート名を変更する方法を教えてください。
-
VBAを使用してExcelのシート名を変更する方法は、【.Name】を使用します。 詳しくは、#VBAマクロでExcelのシート名を変更する方法をご覧ください。
- WorksheetオブジェクトのNameプロパティを使用してExcelのシート名を変更する方法を教えてください。
-
#VBAマクロでExcelのシート名を変更する方法をご覧ください。
Excelに入力されたデータをもとに、Excelのシート名を一括で変更するVBAマクロの解説
【Excelに入力されたデータをもとに、Excelのシート名を一括で変更するVBAマクロ】は3つのコードで成り立っています。
Excelに入力されたデータをもとに、Excelのシート名を一括で変更するVBAマクロの解説
- 特定のExcelのシート名をすべて出力するVBAマクロ
- Excelのデータを元に特定のExcelのシート名を一括変更するVBAマクロ
- シートのデータを削除するVBAマクロ
特定のExcelのシート名をすべて出力するVBAマクロ
まずは、シート名を変更したいExcelの既存のシート名を取得するVBAマクロです。
Excelのデータを元に特定のExcelのシート名を一括変更するVBAマクロ
次に、入力したデータを元に対象のExcelのシート名を変更するVBAマクロです。
シートのデータを削除するVBAマクロ
最後に入力してあるデータを一括削除するVBAマクロです。
特定のExcelのシート名をすべて出力するVBAマクロの解説
このマクロは、ユーザーにExcelファイルを選択させ、そのファイル内のすべてのシート名をリストします。
選択したファイルのフルパスはセルA1に出力され、シート名はセルB5から順に出力されます。エラーハンドリングも考慮されており、処理が正常に完了すると「完了しました」というメッセージが表示されます。
Option Explicit
Sub ListSheets()
' 処理を開始
On Error GoTo ErrorHandler
' Sheet1のB5セルから下のB列のデータを削除
ThisWorkbook.Sheets("Sheet1").Range("B5:B" & Rows.Count).Clear
' ファイルダイアログを開く
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
fd.Title = "Excelファイルを選択してください"
fd.Filters.Add "Excelファイル", "*.xls; *.xlsx; *.xlsm", 1
' ファイルを選択
If fd.Show = -1 Then
' 選択したファイルを開く
Dim wb As Workbook
Set wb = Workbooks.Open(fd.SelectedItems(1))
' 選択したExcelファイルのパスをA1に出力
ThisWorkbook.Sheets("Sheet1").Cells(1, 1).Value = wb.FullName
' Sheet1のB5セルからシート名を出力
Dim i As Long
For i = 1 To wb.Sheets.Count
ThisWorkbook.Sheets("Sheet1").Cells(i + 4, 2).Value = wb.Sheets(i).Name
Next i
' 開いたファイルを閉じる
wb.Close False
End If
' 完了メッセージを表示
MsgBox "完了しました"
Exit Sub
ErrorHandler:
' エラーメッセージを表示
MsgBox "エラーが発生しました: " & Err.Description
End Sub
コードの変更点
コードの変更点
- 出力シート名
- 出力開始位置
- 対応するファイル形式
出力シート名
シート名を出力する先のシートを変更する場合、シート名を適切なものに変更します。
ThisWorkbook.Sheets("Sheet1")
出力開始位置
シート名の出力開始位置を変更する場合、セルのアドレスを変更します。
Range("B5:B" & Rows.Count) と Cells(i + 4, 2)
対応するファイル形式
対応するExcelファイルの形式を変更する場合、フィルタの部分を変更します。
fd.Filters.Add "Excelファイル", "*.xls; *.xlsx; *.xlsm", 1
注意点
データが大量にある場合、シート名の出力に時間がかかる場合があります。
VBAマクロで実行した操作は元に戻せないので、操作前にデータのバックアップを取ることを推奨します。
環境設定
特に必要な環境設定はありませんが、マクロの実行を許可する必要があります。
セキュリティ設定でマクロを有効にし、信頼されたソースからのマクロのみを実行するよう設定します。
各コードの解説
各コードの解説
- データの削除
- ファイル選択
- ファイルの開く
- ファイルパスの出力
- シート名の出力
- ファイルの閉じる
- 完了メッセージの表示
- エラーハンドリング
データの削除
Sheet1のB5セルから下のB列のデータを削除。この部分で前回の結果がクリアされます。
' Sheet1のB5セルから下のB列のデータを削除
ThisWorkbook.Sheets("Sheet1").Range("B5:B" & Rows.Count).Clear
ファイル選択
ユーザーにExcelファイルを選択させるダイアログを表示。対象となるファイルはExcelの標準形式に限定されます。
' ファイルダイアログを開く
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
fd.Title = "Excelファイルを選択してください"
fd.Filters.Add "Excelファイル", "*.xls; *.xlsx; *.xlsm", 1
ファイルの開く
選択したExcelファイルを開きます。
' ファイルを選択
If fd.Show = -1 Then
' 選択したファイルを開く
Dim wb As Workbook
Set wb = Workbooks.Open(fd.SelectedItems(1))
ファイルパスの出力
選択したExcelファイルのフルパスをSheet1のセルA1に出力します。
' 選択したExcelファイルのパスをA1に出力
ThisWorkbook.Sheets("Sheet1").Cells(1, 1).Value = wb.FullName
シート名の出力
選択したExcelファイルのすべてのシート名をSheet1のセルB5から順に出力します。
' Sheet1のB5セルからシート名を出力
Dim i As Long
For i = 1 To wb.Sheets.Count
ThisWorkbook.Sheets("Sheet1").Cells(i + 4, 2).Value = wb.Sheets(i).Name
Next i
ファイルの閉じる
開いたExcelファイルを閉じます。変更を保存しないようにしています。
' 開いたファイルを閉じる
wb.Close False
完了メッセージの表示
処理が完了したらメッセージボックスで「完了しました」と表示します。
' 完了メッセージを表示
MsgBox "完了しました"
Exit Sub
エラーハンドリング
エラーが発生した場合、エラーメッセージを表示します。これにより、エラーが何であったかを特定しやすくします。
ErrorHandler:
' エラーメッセージを表示
MsgBox "エラーが発生しました: " & Err.Description
End Sub
Excelのデータを元に特定のExcelのシート名を一括変更するVBAマクロのコードの解説
このVBAマクロは、指定されたExcelファイル内のシート名を変更する処理を行います。変更前のシート名と変更後のシート名は、別のExcelファイル(ThisWorkbookのSheet1)のB列とC列にそれぞれ記載されています。
A1セルには対象のExcelファイルのパスが指定されています。このマクロは以下の処理を順番に実行します。
Option Explicit
Sub ChangeSheetNames()
' エラーハンドリングの開始
On Error GoTo ErrorHandler
' ThisWorkbookのSheet1のA1セルの内容をファイルパスとして取得
Dim filePath As String
filePath = ThisWorkbook.Sheets("Sheet1").Cells(1, 1).Value
' 指定されたパスのワークブックを開く
Dim wb As Workbook
Set wb = Workbooks.Open(filePath)
' ThisWorkbookのSheet1のB5セルから下のセルに記載されているシート名に対応する
' ThisWorkbookのSheet1のB列のシート名とC列の新しい名前で変更
' 新しい名前が現在の名前と同じ場合、またはC列にデータが入力されていない場合はスキップ
Dim i As Long
Dim lastRow As Long
lastRow = ThisWorkbook.Sheets("Sheet1").Cells(Rows.Count, 2).End(xlUp).Row
For i = 5 To lastRow
Dim oldName As String
Dim newName As String
oldName = ThisWorkbook.Sheets("Sheet1").Cells(i, 2).Value
newName = ThisWorkbook.Sheets("Sheet1").Cells(i, 3).Value
If oldName <> newName And newName <> "" Then ' シート名が異なり、新しい名前が空でない場合のみ変更
wb.Sheets(oldName).Name = newName
End If
Next i
' 開いたファイルを保存して閉じる
wb.Close SaveChanges:=True
' 処理完了のメッセージを表示
MsgBox "完了しました", vbInformation
' エラーハンドリングの終了
Exit Sub
ErrorHandler:
' エラーが発生した場合の処理
MsgBox "エラーが発生しました:" & Err.Description, vbExclamation
If Not wb Is Nothing Then
wb.Close SaveChanges:=False
End If
End Sub
Excelのデータを元に特定のExcelのシート名を一括変更するVBAマクロのコードの解説
- 対象のExcelファイルを開く。
- B列に記載された旧シート名とC列に記載された新シート名に基づいて、対象ファイルのシート名を変更する。
- 変更が完了したら対象ファイルを保存して閉じる。
- 「完了しました」というメッセージを表示する。
注意点
注意点
- データ量が大量の場合
- VBAマクロでの操作は元に戻せない
データ量が大量の場合
このコードは、B列とC列に記載された全てのシート名に対して処理を行うため、データが大量にある場合は処理に時間がかかることがあります。
VBAマクロでの操作は元に戻せない
このマクロによって変更されたシート名は、Ctrl+Z(元に戻す)などの操作で元に戻せません。変更前のデータをバックアップしておくことをおすすめします。
環境設定
特別な環境設定は必要ありません。
ただし、マクロを実行する際には、セキュリティ設定でマクロを有効にする必要があります。
Excelの「ファイル」メニュー >「オプション」>「セキュリティセンター」>「セキュリティセンターの設定」からマクロの設定を調整できます。
各コードの解説
各コードの解説
- ファイルパスの取得
- ファイルの開く
- シート名の変更
- ファイルの保存と閉じる
- 完了メッセージの表示
- エラーハンドリング
ファイルパスの取得
対象となるExcelファイルのパスをThisWorkbookのSheet1のA1セルから取得します。
' ThisWorkbookのSheet1のA1セルの内容をファイルパスとして取得
Dim filePath As String
filePath = ThisWorkbook.Sheets("Sheet1").Cells(1, 1).Value
ファイルの開く
指定されたパスのExcelファイルを開きます。
' 指定されたパスのワークブックを開く
Dim wb As Workbook
Set wb = Workbooks.Open(filePath)
シート名の変更
B列に記載された旧シート名とC列に記載された新シート名に基づいて、対象ファイルのシート名を変更します。新しい名前が現在の名前と同じ場合、またはC列にデータが入力されていない場合は、そのシートの名前の変更はスキップされます。
' ThisWorkbookのSheet1のB5セルから下のセルに記載されているシート名に対応する
' ThisWorkbookのSheet1のB列のシート名とC列の新しい名前で変更
' 新しい名前が現在の名前と同じ場合、またはC列にデータが入力されていない場合はスキップ
Dim i As Long
Dim lastRow As Long
lastRow = ThisWorkbook.Sheets("Sheet1").Cells(Rows.Count, 2).End(xlUp).Row
For i = 5 To lastRow
Dim oldName As String
Dim newName As String
oldName = ThisWorkbook.Sheets("Sheet1").Cells(i, 2).Value
newName = ThisWorkbook.Sheets("Sheet1").Cells(i, 3).Value
If oldName <> newName And newName <> "" Then ' シート名が異なり、新しい名前が空でない場合のみ変更
wb.Sheets(oldName).Name = newName
End If
Next i
ファイルの保存と閉じる
シート名の変更が完了したら、対象のExcelファイルを保存して閉じます。
' 開いたファイルを保存して閉じる
wb.Close SaveChanges:=True
完了メッセージの表示
処理が完了したら、「完了しました」というメッセージを表示します。
' 処理完了のメッセージを表示
MsgBox "完了しました", vbInformation
エラーハンドリング
エラーが発生した場合にエラーメッセージを表示し、開いたワークブックを閉じる処理を行います。
ErrorHandler:
' エラーが発生した場合の処理
MsgBox "エラーが発生しました:" & Err.Description, vbExclamation
If Not wb Is Nothing Then
wb.Close SaveChanges:=False
End If
シートのデータを削除するVBAマクロのコードの解説
このコードはExcelのVBAマクロで、指定されたシート(Sheet1)のA1セルとB5セルから下および右に入力されているデータを削除します。
処理が正常に完了した場合は、「完了しました」というメッセージが表示されます。
エラーが発生した場合は、エラーの内容が表示されます。
Sub DeleteData()
' ThisWorkbookのSheet1にアクセス
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
' エラーハンドリングの開始
On Error GoTo ErrorHandler
' A1セルのデータを削除
ws.Cells(1, 1).ClearContents
' B5から下と右に入力されている範囲を削除
ws.Range(ws.Cells(5, 2), ws.Cells(ws.Cells(Rows.Count, 2).End(xlUp).Row, ws.Cells(5, Columns.Count).End(xlToLeft).Column)).ClearContents
' 完了メッセージの表示
MsgBox "完了しました", vbInformation
' 正常終了
Exit Sub
ErrorHandler:
' エラー発生時の処理
MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub
コードの変更箇所
コードの変更箇所
- シート名の変更
- 削除するセルの変更
シート名の変更
削除するデータがあるシート名が「Sheet1」でない場合、シート名を変更します。
コード内で指定しているシート名が「Sheet1」です。自分の環境で使用するシート名が異なる場合、この部分を適切なシート名に変更する必要があります。
例: Set ws = ThisWorkbook.Sheets(“MySheet”) など。
Set ws = ThisWorkbook.Sheets("Sheet1")
削除するセルの変更
削除を開始するセルがB5でない場合、削除するセルの範囲を変更します。
コードは、B5セルから下および右にあるデータを削除します。
削除を開始するセルが異なる場合、この部分を適切なセルに変更する必要があります。
例: B6セルから削除する場合は、ws.Cells(6, 2) など。
ws.Cells(5, 2)
注意点
データが大量にある場合、処理に時間がかかることがあります。
VBAマクロで実行した操作は、通常、元に戻せません(Ctrl + Zで元に戻せない)。
処理を実行する前に、重要なデータのバックアップを取ることがおすすめです。
環境設定
特に追加の環境設定は必要ありませんが、マクロを実行する際は、Excelのセキュリティ設定でマクロの実行を許可する必要があります。
各コードの解説
各コードの解説
- シートの設定
- エラーハンドリング
- A1セルの削除
- B5セルからの削除
- 完了メッセージ
シートの設定
ThisWorkbookのSheet1にアクセスします。
' ThisWorkbookのSheet1にアクセス
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
エラーハンドリング
エラーが発生した場合にエラーメッセージを表示します。
' エラーハンドリングの開始
On Error GoTo ErrorHandler
A1セルの削除
A1セルのデータを削除します。
' A1セルのデータを削除
ws.Cells(1, 1).ClearContents
B5セルからの削除
B5セルから下および右に入力されているデータを削除します。
' B5から下と右に入力されている範囲を削除
ws.Range(ws.Cells(5, 2), ws.Cells(ws.Cells(Rows.Count, 2).End(xlUp).Row, ws.Cells(5, Columns.Count).End(xlToLeft).Column)).ClearContents
完了メッセージ
処理が正常に完了した場合、「完了しました」というメッセージを表示します。
' 完了メッセージの表示
MsgBox "完了しました", vbInformation
コメント