こんな人にオススメの記事です
- Excelのシート名とセルの値を連動させたい人
- Excelのシート名を特定のセルの値にしたい人
- Excelのシート名を自動で変更したい人
Excelを使っていると、「データの内容に合わせてシート名を変えたい」と思うことはありませんか。
たとえば、顧客名や日付などをシート名にしたい場合、都度手動で変更するのはとても面倒ですよね。
そこで、「セルの値をもとに自動でシート名を変更する」仕組みをVBAで作ると、手間を減らせて非常に便利です。
Excelでシート名をセルから取得する方法
ここからは、VBAを使ってExcelのシート名をセルから取得する方法を解説していきます。
VBAコードの概要
まずは、どんなVBAコードなのか簡単に概要を説明します。
- A1セルにある値をそのシートの名前にします。
- A1セルを変更したタイミングで、そのシート名が自動的に変わります。
- 全てのシートに対応しています。
- 同じシート名を使用しようとするとエラーが表示されます。メッセージウィンドウが出るので、別の名前に変えてください。
- シート名に「:」「/」「\」「*」などの文字は使用できません。代わりに「_」で置き換えるようにしています。
- 長さ制限や文字が空欄の場合などは、自動的に「シート+日付」が付与されます。
VBAコードを実装する方法
ここからは、A1セルの内容が変更されたタイミングで自動的にシート名を変えるVBAコードと、その実装方法を紹介します。
次に、「Visual Basic」をクリックしてください。
「Visual Basic」をクリックすると、以下のような画面が表示されます。
左上のプロジェクト内から「ThisWorkbook」をダブルクリックしてください。
「ThisWorkbook」をダブルクリックすると、右側に空白のページが表示されます。
その中に以下のコードを貼り付け、右上の「×」をクリックして「Visual Basic」の画面を閉じてください。
Option Explicit
' A1セルを参照する定数(シート名のもとになるセル)
Private Const NAME_REFERENCE As String = "A1"
' シート名で使えない文字を置換するときの置き換え文字
Private Const REPLACE_CHAR As String = "_"
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
' 変更されたセルが A1 の範囲と交差するかをチェック
If Not Intersect(Target, Sh.Range(NAME_REFERENCE)) Is Nothing Then
Dim newName As String
' A1の値をシート名として整形(無効文字置換や長さ制限など)
newName = ReplaceInvalidChars(CStr(Target.Value))
On Error GoTo err_handler
' 実際にシート名を変更
Sh.Name = newName
On Error GoTo 0
End If
Exit Sub
err_handler:
Select Case Err.Number
Case 1004 ' 既に存在するシート名、もしくは無効文字など
MsgBox "シート名を「" & newName & "」に変更できませんでした。" & vbCrLf & _
"既に存在する名前か、無効な名前の可能性があります。"
Case Else
MsgBox "シート名の変更で予期せぬエラーが発生しました。番号: " & Err.Number & vbCrLf & _
"内容: " & Err.Description
End Select
End Sub
Private Function ReplaceInvalidChars(sheetName As String) As String
' Excelで無効な文字 + ダブルクォート
Dim invalidChars As Variant
invalidChars = Array(":", "\", "?", "[", "]", "/", "*", """")
Dim i As Long
For i = LBound(invalidChars) To UBound(invalidChars)
sheetName = Replace(sheetName, invalidChars(i), REPLACE_CHAR)
Next i
' 改行やタブを除去したい場合
sheetName = Replace(sheetName, vbCr, "")
sheetName = Replace(sheetName, vbLf, "")
sheetName = Replace(sheetName, vbTab, "")
' Excelシート名は31文字までなので、それを超える場合は切り捨てる
If Len(sheetName) > 31 Then
sheetName = Left(sheetName, 31)
End If
' 空白文字のみのケースを防ぐ
If Trim(sheetName) = "" Then
' 空にならないように、日時付きのシート名を付与
sheetName = "シート" & Format(Now, "yyyymmddHHMMSS")
End If
ReplaceInvalidChars = sheetName
End Function
Excelの通常画面に戻り、A1に入力した値がシート名に反映されることを確認してください。
使い方のポイント
- 参照セルを変えたい場合
NAME_REFERENCE
を"A2"
や"B5"
など目的のセル番地に変える。- 複数セルを同時に監視したい場合は
"A1:A2"
などの範囲を指定。
- 置き換え文字を変えたい場合
REPLACE_CHAR
の初期値"_”
を"-"
や"_" 以外の任意文字
に変更する。- さらに厳しく文字制限したい場合は、
invalidChars
配列の要素を追加・削除し、制御を強化する。
- エラーが出るときのチェック項目
- 同名のシートがないか確認する(重複はNG)。
- シート名に無効文字が含まれていないか(「:」「/」「\」など)。
- シート名が31文字を超えていないか。
Excelでシート名をセルから取得する方法に関するよくある質問と答え
Excelでシート名をセルから取得する方法に関するよくある質問と答えをまとめました。
基本操作について
エラーやトラブルの解決方法
シート名をセルから取得するVBAのカスタマイズ
その他のよくある質問
その他Excelに関する記事
その他Excelに関する記事はこちらです。是非御覧ください。
-
エクセル(Microsoft Office Excel)
【Excel】画像をセルに埋め込む方法
こんな人にオススメの記事です 画像をセルの中に埋め込みたい人 セルの中に埋め込まれた画像を元に戻したい人 Excelでセルに画像を埋め込むと、セルの移動やサイズ変更... -
エクセル(Microsoft Office Excel)
【エクセル】自動計算されない場合の原因と対処法
こんな人にオススメの記事です エクセルの計算式が突然自動計算されなくなった場合 エクセルの計算式を自動計算したくない人 エクセルは普段は自動計算されていて、関数... -
エクセル(Microsoft Office Excel)
【エクセル】ハイパーリンクを簡単に解除する方法
こんな人にオススメの記事です セルのハイパーリンクを削除(解除)したい人 入力した文字が自動的にハイパーリンクになる設定を解除したい人 エクセルで作業をしている... -
エクセル(Microsoft Office Excel)
【Excel】リボン(メニューバー)を常に表示する方法|デスクトップ版・Web版対応
こんな人にオススメの記事です Excelでリボン(メニューバー)が消えてしまい、戻し方がわからず困っている人 デスクトップ版だけでなくWeb版Excelでも同様の設定を行い... -
エクセル(Microsoft Office Excel)
【Excel】破損したファイルを修復する方法
こんな人にオススメの記事です Excelのファイルがアプリの強制終了などで破損してしまった場合 Excelで日々の業務をこなしていると、「ファイルが開かない」「保存した... -
エクセル(Microsoft Office Excel)
【Excel】「マクロの実行がブロックされました」と表示された場合の対処法
こんな人にオススメの記事です ダウンロードしたExcelのファイルを開いたら「セキュリティリスク このファイルのソースが信頼できないため、Microsoftによりマクロの実... -
エクセル(Microsoft Office Excel)
エクセル(Excel)で作成したデータをワード(Word)に貼りつける方法7選
こんな人にオススメの記事です エクセルからワードに貼り付けると毎回形が崩れてしまう エクセルのデータを更新したらワードに貼り付けた表も自動的に更新されてほしい ... -
エクセル(Microsoft Office Excel)
xls(古いエクセル)からxlsx(新しいエクセル)に変換する方法
こんな人にオススメの記事です xls形式からxlsx形式に変換したい人 新しいエクセルファイルに変換したい人 古いエクセル形式(.xls)では行や列が不足している人 エクセ... -
エクセル(Microsoft Office Excel)
【Excel】シート名をセルに表示する関数
こんな人にオススメの記事です Excelのシート名を取得する関数を知りたい人 Excelを使っていると、シート名をセルに表示したい場面があります。 特に複数シートを使うテ...
最後までご覧いただきありがとうございました。
このサイトは情シスマンが半径3m以内のITに関する情報を掲載してるサイトです。
Windows系を主として、ソフトや周辺機器の操作や設定について画像も用いながらわかりやすく解説しています。
解説している内容に誤りがあった場合や、補足が必要な場合、もっと知りたい場合はこちらのお問い合わせフォームからご連絡ください。
個人の方を限定にサポートさせていただきます。
実行環境
Windows11 Home 24H2
64 ビット オペレーティング システム
11th Gen Intel(R) Core(TM) i7-11375H @ 3.30GHz 3.30 GHz
16.0 GB RAM
Microsoft 365
コメント