【Excel】シート名をセルから取得する方法

Excelでシート名をセルから取得する方法 Step5 A1に入力した値がシート名に反映されることを確認する

こんな人にオススメの記事です

  • Excelのシート名とセルの値を連動させたい人
  • Excelのシート名を特定のセルの値にしたい人
  • Excelのシート名を自動で変更したい人

Excelを使っていると、「データの内容に合わせてシート名を変えたい」と思うことはありませんか。

たとえば、顧客名や日付などをシート名にしたい場合、都度手動で変更するのはとても面倒ですよね。

そこで、「セルの値をもとに自動でシート名を変更する」仕組みをVBAで作ると、手間を減らせて非常に便利です。

反対に、Excelのセルにシート名を表示させる方法については、【Excel】シート名をセルに表示する関数で詳しく解説しているのでぜひご覧ください。

目次

Excelでシート名をセルから取得する方法

ここからは、VBAを使ってExcelのシート名をセルから取得する方法を解説していきます。

VBAコードの概要

まずは、どんなVBAコードなのか簡単に概要を説明します。

  • A1セルにある値をそのシートの名前にします。
  • A1セルを変更したタイミングで、そのシート名が自動的に変わります。
  • 全てのシートに対応しています。
  • 同じシート名を使用しようとするとエラーが表示されます。メッセージウィンドウが出るので、別の名前に変えてください。
  • シート名に「:」「/」「\」「*」などの文字は使用できません。代わりに「_」で置き換えるようにしています。
  • 長さ制限や文字が空欄の場合などは、自動的に「シート+日付」が付与されます。

VBAコードを実装する方法

ここからは、A1セルの内容が変更されたタイミングで自動的にシート名を変えるVBAコードと、その実装方法を紹介します。

STEP
Excelの「開発」タブをクリック

Excelの「開発」タブをクリックしてください。

「開発」タブが表示されていない場合は、【Excel】開発タブの表示方法をご覧ください。

Excelでシート名をセルから取得する方法 Step1 Excelの「開発」タブをクリック
Excelでシート名をセルから取得する方法 Step1 Excelの「開発」タブをクリック
STEP
「Visual Basic」をクリック

次に、「Visual Basic」をクリックしてください。

Excelでシート名をセルから取得する方法 Step2 「Visual Basic」をクリック
Excelでシート名をセルから取得する方法 Step2 「Visual Basic」をクリック
STEP
左上のプロジェクト内から「ThisWorkbook」をダブルクリック

「Visual Basic」をクリックすると、以下のような画面が表示されます。

Excelをアクティブウィンドウにした状態でAlt+F11を押してもこの画面が表示されます。

左上のプロジェクト内から「ThisWorkbook」をダブルクリックしてください。

Excelでシート名をセルから取得する方法 Step3 左上のプロジェクト内から「ThisWorkbook」をダブルクリック
Excelでシート名をセルから取得する方法 Step3 左上のプロジェクト内から「ThisWorkbook」をダブルクリック
STEP
コードを貼り付け、右上の「×」をクリック

「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でシート名をセルから取得する方法 Step4 コードを貼り付け、右上の「×」をクリック
Excelでシート名をセルから取得する方法 Step4 コードを貼り付け、右上の「×」をクリック
STEP
A1に入力した値がシート名に反映されることを確認する

Excelの通常画面に戻り、A1に入力した値がシート名に反映されることを確認してください。

VBAを使ったExcelはマクロ有効ブック(.xlsm 形式)で保存する必要があります。

Excelでシート名をセルから取得する方法 Step5 A1に入力した値がシート名に反映されることを確認する

使い方のポイント

  1. 参照セルを変えたい場合
    • NAME_REFERENCE"A2""B5"など目的のセル番地に変える。
    • 複数セルを同時に監視したい場合は "A1:A2" などの範囲を指定。
  2. 置き換え文字を変えたい場合
    • REPLACE_CHAR の初期値 "_”"-""_" 以外の任意文字 に変更する。
    • さらに厳しく文字制限したい場合は、invalidChars 配列の要素を追加・削除し、制御を強化する。
  3. エラーが出るときのチェック項目
    • 同名のシートがないか確認する(重複はNG)。
    • シート名に無効文字が含まれていないか(「:」「/」「\」など)。
    • シート名が31文字を超えていないか。

Excelでシート名をセルから取得する方法に関するよくある質問と答え

Excelでシート名をセルから取得する方法に関するよくある質問と答えをまとめました。

基本操作について

セルの値をシート名にするメリットは何ですか?

シートの名前をいちいち打ち直す手間を省けるのが一番大きいです。
たとえば、集計表やレポートなど、多数のシートを管理するときでも、セルを書き換えるだけで名前がそろうため、整合性を取りやすくなります。

どこにコードを貼り付ければ、セルを変更したタイミングでシート名が変わるようになりますか?

Excelの画面で「Alt + F11」キーを押すと、Visual Basicという編集画面が開きます。
左側に表示される一覧から「ThisWorkbook」を選び、そこにマクロを貼り付けてください。これでブック全体のセル変更を自動的に確認できるようになり、A1セルが変わった瞬間にシート名を更新する仕組みが動きます。

セルを書き換えるだけでシート名が変わる仕組みは、どのように動いているのですか?

「Workbook_SheetChange」という仕組み(イベント)を使っています。A1セル(デフォルト設定)の値が変わると、そのタイミングでコードが呼ばれ、シート名を自動調整してくれます。

エラーやトラブルの解決方法

A1セルを空にした場合でもエラーが出ずに処理できますか?

A1セルが空の場合はシート名が空にならないように、日時付きのシート名を付与します。

既にあるシート名と同じ名前をセルに入れるとエラーになります。どうやって回避できますか?

同じシート名にはできないため他の値をA1に入力してください

シート名が思ったように変わらないとき、どこをチェックすればいいですか?

ReplaceInvalidCharsという関数で、改行や無効文字を削除したり、31文字を超えていたら切り捨てる動きをしている可能性があります。もし想定と違う結果になったら、その関数内の処理内容をよく確認すると原因が見つかりやすいです。

シート名をセルから取得するVBAのカスタマイズ

A1以外のセルを参照したい場合は、何を変更すればいいのでしょうか?

コード冒頭にある「NAME_REFERENCE」を"A1"から別のセル番地、たとえば"A2"や"B1"に変えてください。これだけで対象とするセルが切り替わり、変更したセルの値がシート名になります。

無効文字の置き換えを、アンダースコアではなくハイフンや空白にしたいときはどうすればいいですか?

冒頭の「REPLACE_CHAR」が"_(アンダースコア)"になっているので、これを"-"や""(空文字)に書き換えてください。シート名で使えない文字は、自動でそちらに置き換えられます。

31文字を超えると強制的に切り捨てられていますが、別の動きをさせる方法はありますか?

ReplaceInvalidCharsの中でIf文を使って31文字超過を判定しており、その部分を自由に書き換えられます。切り捨てるかわりにメッセージを表示するなど、好みにあわせてカスタマイズしてください。

無効文字をリストに加えたい場合は、具体的にどこを編集すればいいですか?

ReplaceInvalidCharsの中にあるinvalidCharsという配列の並びに、新しくブロックしたい文字を追加すればOKです。たとえば";"や"|"を加えておけば、入力時にそれらも自動で置き換えられます。

その他のよくある質問

他のパソコンで使う場合、マクロはどうやって持っていけばいいですか?

このコードを含むExcelファイルを丸ごと保存して移すか、あるいはファイル形式を「.xlsm」(マクロ有効ブック)にして共有するのが一般的です。相手先でもマクロを有効にしないと動きませんので、先に設定を確認してもらうとスムーズです。

ブックを開いたタイミングで既存のシート名を自動的に整える方法はありますか?

Workbook_SheetChangeではなく、Workbook_Openという仕組みを使えばブックを開いた瞬間にコードが動きます。そこでReplaceInvalidCharsを使って、すべてのシート名をまとめてチェックするようにすれば、開くたびに名前を整えられます。

改行やタブなどの隠れた文字が混じっているときは大丈夫でしょうか?

改行やタブはシート名に使えない文字なので、コード内で自動的に削除するようになっています。もしセル内で改行を使っていても、問題なく処理されるはずです。

シート名が勝手に短くなったり、別の文字に変わったりするときがあります。何が起きていますか?

ReplaceInvalidCharsの段階で、Excelが使えない文字を別の文字に置き換えたり、31文字を超えた場合は切り捨てたりしています。意図しない形で変わるときは、この関数内の処理を調整してみてください。

シート名を変えると、数式がリンク切れを起こすことがありますか?

はい、ありえます。たとえば、ほかのセルで「=シート名!A1」のように直接参照している場合、名前が変わることでリンクが外れることがあります。たくさんの数式でシート名を指定している場合は、あらかじめ参照の方法を見直しておくと安全です。

その他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

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次