【Excel VBA】シート名変えたらセルも自動変更!コピペで実現「修正漏れ」撲滅コード

【業務効率化】VBA
スポンサーリンク

こんにちは!ぐーです。
いつもブログをご覧いただき、ありがとうございます!

普段Excelを使っていると、こんな悩みありませんか?

  • 「月報シートをコピーして『5月』ってシート名変えたのに、シートの中のタイトル(A1セルとか)を『4月』のままにしちゃった…」
  • 「取引先ごとにシートを分けてるけど、シート名とセルに入力した会社名が微妙に違ってて、後で混乱する…」
  • 「シートが30枚もあると、名前と中身を全部チェックするだけで時間が溶ける…もうヤダ…」

その「うっかりミス」や「面倒な二度手間」、本当にストレスですよね。

この記事では、そんな「シート名と特定のセルの値を、いちいち手作業で合わせないといけない」という悩みを解決します。

VBA(Excelに搭載されているプログラミング機能)を使いますが、大丈夫です。今回はコピペして、あなたが使いたいシートに貼り付けるだけで動くコードをご紹介します。

忌まわしき「修正漏れ」を撲滅しましょう!


パターン1:シート名を変更したら、セル(A1)の値も自動で変わる

これが一番多いニーズかもしれません。「シート名」を正として、セルの値を自動で合わせる方法です。

例えば、「4月」シートをコピーして「5月」というシート名に変更したとします。その「5月」シートを開いた(クリックした)瞬間に、A1セルにも自動で「5月」と入力されるようにします。

実行手順

  1. Excelを開き、Alt + F11 キーを同時に押して、「VBE(VBAエディタ)」という別のウィンドウを開きます。
  2. 画面の左側に「プロジェクトエクスプローラー」という欄があります。そこで、この機能を設定したいシート名(例: Sheet1(4月)とか)をダブルクリックします。
  3. 真っ白なコードウィンドウが開きます。
  4. 以下のコードを、その真っ白な部分にそのままコピーして貼り付けてください。

🔽 コピペ用コード(特定のシートだけ動かす場合)

Private Sub Worksheet_Activate()
    ' このシートがアクティブになった時(開かれた時)に実行されます

    ' ここの "A1" を好きなセル番地に変更OK
    ' A1セルに、このシートの名前(Me.Name)を書き込みます
    Me.Range("A1").Value = Me.Name
End Sub



コードの簡単な解説

  • Worksheet_Activate(): 難しい言葉ですが、「このシートが選ばれた(アクティブになった)瞬間に実行しますよ」という合図です。
  • Me: 「このコードが書かれているシート自身」のことです。
  • Me.Name: このシートの名前(例: “5月”)を取得します。
  • Me.Range(“A1”).Value = …: A1セルの値(Value)に、取得したシート名を上書きします。

もし「A1セルじゃなくて、B2セルに反映させたい!」という場合は、コード内の “A1” の部分を “B2” に書き換えるだけでOKです。


(応用)すべてのシートで「シート名 → A1セル」を連動させたい場合

「新しく作るシート全部に、この機能が自動で適用されてほしい!」という場合は、こちらが便利です。

実行手順

  1. 先ほどと同じく VBE を開きます (Alt + F11)。
  2. 左側のプロジェクトエクスプローラーで、シート名ではなく ThisWorkbook という項目をダブルクリックします。
  3. 開いたウィンドウに、以下のコードをコピペします。

🔽 コピペ用コード(ブック全体で動かす場合)

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    ' いずれかのシートがアクティブになった時に実行されます
    ' Sh には、アクティブになったシートそのものが入ります
   
    ' ★ここの "A1" を好きなセル番地に変更OK
    Sh.Range("A1").Value = Sh.Name
End Sub


これだけで、どのシートを開いても、そのシート名がA1セルに自動で反映されるようになります。特定のシート(目次ページなど)だけ反映したくない場合は設定が少し複雑になるので、まずは「全部反映する」で試してみてください。


パターン2:セル(A1)の値を変更したら、シート名も自動で変わる

今度は逆のパターンです。「A1セル」を正として、シート名を自動で変更します。

A1セルに「株式会社A社 見積書」と入力したら、シート名も自動で「株式会社A社 見積書」に変わるイメージです。(ただし、シート名には文字数制限や使えない文字があるので注意が必要です)

実行手順

  1. VBE を開きます (Alt + F11)。
  2. この機能を設定したいシート名(例: Sheet1)をダブルクリックします。
  3. 開いたウィンドウに、以下のコードをコピペします。

🔽 コピペ用コード(セル → シート名)

Private Sub Worksheet_Change(ByVal Target As Range)
    ' このシートのセルが変更された時に実行されます
   
    ' ここの "A1" を監視したいセル番地に変更OK
    Dim WatchCell As Range
    Set WatchCell = Me.Range("A1")

    ' 変更されたセル(Target)と、監視したいセル(WatchCell)が
    ' 重なっていない(A1以外が変更された)場合は、何もしないで終了
    If Intersect(Target, WatchCell) Is Nothing Then
        Exit Sub
    End If
   
    ' --- A1セルが変更された場合の処理 ---
   
    ' もしA1セルが空欄にされたら、エラーになるので何もしない
    If WatchCell.Value = "" Then Exit Sub

    Dim newName As String
    newName = WatchCell.Value

    ' シート名に使えない文字を削除します( \ / ? * [ ] )
    newName = Replace(newName, "/", "")
    newName = Replace(newName, "\", "")
    newName = Replace(newName, "?", "")
    newName = Replace(newName, "*", "")
    newName = Replace(newName, "[", "")
    newName = Replace(newName, "]", "")
   
    ' シート名は31文字以内というルールがあります
    If Len(newName) > 31 Then
        newName = Left(newName, 31)
    End If

    ' 万が一、同じシート名が既にあるとエラーになるので、エラーが起きても無視する
    On Error Resume Next
   
    ' このシートの名前(Me.Name)を、加工したA1セルの値(newName)に変更
    Me.Name = newName
   
    ' エラー処理を元に戻す
    On Error GoTo 0
   
End Sub



コードの簡単な解説

  • Worksheet_Change(ByVal Target As Range): シートのセルが変更されたら動く合図です。Target には「変更されたセル」が入っています。
  • Intersect(…) Is Nothing: 「A1セル(WatchCell)」と「変更されたセル(Target)」が重なっていないか、つまり「A1以外が変更されたか」をチェックしています。
  • 重要な注意点:
  1. シート名には「 / \ ? * [ ] 」といった記号は使えません。コード内でこれらを自動で削除(Replace)しています。
  2. シート名は31文字以内という制限があります。コード内で自動で31文字にカット(Left(…, 31))しています。
  3. すでに同じシート名があるとエラーになります。On Error Resume Next という手法で、エラーが出てもExcelが止まらないようにしています(変更が無視されます)。

まとめ

今回は、Excelのシート名とセルの値を自動で連動させるVBAコードを2パターン(+応用1)ご紹介しました。

  • パターン1: シートを開くと、A1セルがシート名に自動で変わる。
  • パターン2: A1セルを変更すると、シート名が自動で変わる。

VBAと聞くと「難しそう…」「エラーが出たら怖い」と感じるかもしれませんが、まずはコピペで試してみてください。

小さな自動化が、あなたの「面倒くさい」「ミスしたくない」というストレスを確実に減らしてくれます!

【業務効率化】VBAの記事を見る



VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を厳選して紹介します。 もう本選びで失敗したくない方は、ぜひ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

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