事務作業をやっていると、このような悩みを持ったことはないでしょうか?
・シート名をセルに手入力していて、手間がかかっている
・シートが多く、管理・参照に時間がかかってしまう
・同じ内容のシートをコピーしたいのに、一つずつコピーして効率が悪い
シート名をセルに表示したいときって、意外と多いですよね!
また同じシートを一つずつコピーしたり、シートが多いと探すのに手間取ったり。。。
こういう作業って、何気に時間かかってしまいますよね。。。
当時は私もどうしたらいいだろう?と困っておりました。
でも、もう大丈夫!
この記事では、これらの問題を解決に導くテクニックを紹介します!
「作業効率を上げたい!」と感じている方!ぜひ一度目を通していただけると嬉しいです!
シート名を自動反映できると、何が便利なの?
シート名を自動反映することができることにより、様々なメリットを享受できます!
同じシートを複数作成するとき便利!
シートを追加したタイミングでシート名を変更すれば、セルに表示される文字列も変わるため、入力ミスを防げたり、手間を減らしたりすることができます!
担当や対象店舗が変わったり、増減したりするときなど、シート名の変更やシートの追加・削除で済むので、使いまわしするファイルには非常に便利です!
「セルにシート名を表示させる方法」にて、設定方法を紹介しています!

各シートの情報一覧を作成するのに便利!
INDIRECT関数を使用することにより、各シートの情報を一覧化することができます!
各シートの情報を1シートに一覧化できるため、わざわざシートごとに見に行く必要がありません。
詳細は「各シートの情報を一覧化」にて説明しておりますので、ご覧ください!

各シートへのリンクを作成するのに便利!
HYPERLINK関数を使えば、各シートにとぶリンクを作ることができます!
いちいちシートを探さなくても、一覧化したシートより各シートを参照することができます。
詳細は「各シートをリンク化」にて説明しておりますので、ご覧ください!
(下の図は、リンクをクリックすると、各シートのセルA1にとぶように設定しています)

同じシートを、シート名を指定してコピーすることができる!
同じシートを手動で複数コピーするのって面倒ですよね。。
例えば日報など、「1日」、「2日」、「3日」・・・と、右クリック&移動またはコピーを延々繰り返す、、、嫌になりますよね。。
シート名を自動反映できると、同じ内容のシートを一気にコピーすることも可能です!
詳細は「セルの値をシートに反映する方法」で紹介しています!
とても便利な方法なので、ぜひ活用してみてください!

セルにファイル名やシート名を表示させるには?
エクセルで作業をしていると、ファイル名やシート名を表示させたいことがよくあります。
ただ、毎回シート名を手入力するのは大変ですよね。。
でも、それは数式で自動反映させることができます!
どのようにしたらできるのか、詳しく説明していきたいと思います。
セルにシート名を表示させる方法
シート名をセルに表示させるには、CELL
関数を使う方法が簡単です。以下数式を使用することで、セルにシート名を表示させることができます!
=RIGHT(CELL("filename",A1),LEN(CELL("filename",A1))-FIND("]",CELL("filename",A1)))
エクセルに上記数式をコピペすればシート名が表示されますが、どうやってシート名を表示しているかを解説します!
■シート名を表示する流れ
・CELL関数を使い、ファイルパスを取得する
↓
・LEN関数でファイルパスの文字数を取得する
↓
・FIND関数で「]」の開始位置を取得し、ファイルパスの総文字数から引く(=シート名の文字数)
※ファイル名は「[]」記号で囲われるため、「]」以降の文字列がシート名になる
↓
・RIGHT関数で、右側からシート名の文字数分の文字列を取得する
文字だと分かりづらいので、実際にエクセルで表現してみました!今回はCドライブ直下「テスト」フォルダに「シート名ファイル名を表示」というエクセルファイルを作成し、そのシート名を取得しました。

それぞれの関数に関しては以下の通りです。
関数 | 書式 | 説明 |
CELL | =CELL(検査の種類,[対象範囲]) | セルに関する情報を返す (対象範囲は省略可) |
LEN | =LEN(文字列) | 文字列の文字数を返す |
FIND | =FIND(検索文字列,対象,[開始位置]) | 対象の文字列から、 検索する文字列の開始位置を返す (開始位置は省略可) |
RIGHT | =RIGHT(文字列,[文字数]) | 文字列の右端から指定した文字数の文字を返す |
セルにファイル名を表示させる方法
数式が少し長くなってしまいますが、MID関数を組み合わせることにより、ファイル名をセルに表示させることもできます!
=MID(CELL("filename",A1),FIND("[",CELL("filename",A1))+1,LEN(CELL("filename",A1))-FIND("[",CELL("filename",A1))-(LEN(CELL("filename",A1))-FIND("]",CELL("filename",A1))+1))
こちらもどうやってファイル名を表示しているかを解説します!
■ファイル名を表示する流れ
・CELL関数を使い、ファイルパスを取得する
↓
・FIND関数で「[」から+1の開始位置を取得する
↓
・ファイルパスの総文字数から「[」までの文字数と、「]」から+1の文字数を引く(=ファイル名の文字数)
↓
・MID関数で「[」から+1の開始位置より、ファイル名の文字数分の文字列を取得する
文字だとやっぱり分かりづらいですね。。こちらも同様に実際にエクセルで表現してみました!先ほどと同じファイルを使用し、ファイル名を取得しました。

MID関数に関しての説明は以下の通りです。
関数 | 書式 | 説明 |
MID | =MID(文字列,開始位置,文字数) | 指定した文字列の位置から、指定した文字数の文字を返す |
ぜひ、これの関数を活用して作業効率をアップさせてください!
全シート名をセルに表示させる方法
上記ではシート名を取得する関数を紹介しましたが、以下ではエクセルVBAで全シート名を取得できるVBAコードを紹介します!シートの抜け漏れがないか確認できたり、ファイル整理に役立たせることが期待できます。
今回は、下のファイルにあるシート名を「シート名一覧」シートのA列に記載します。

実際にVBAコードを組んでみる
ではVBAコードを作成していきましょう!
実際に使用するときは、シート名とシート名を反映させる場所を適宜変更してください。
Sub シート名を取得()
Dim ws As Worksheet
Dim i As Integer
Dim targetSheet As Worksheet
' シート名を表示するシートを設定(シート名一覧シートに各シート名を取得)※適宜変更
Set targetSheet = ThisWorkbook.Sheets("シート名一覧")
' 出力開始位置(セルA1より出力)※適宜変更
i = 1
' シート名をリスト表示
For Each ws In ThisWorkbook.Sheets
targetSheet.Cells(i, 1).Value = ws.Name '1列目以外を指定する場合は適宜変更
i = i + 1
Next ws
End Sub
こちらのVBAコードを実行すると、全シート名を取得することができました!

どのような活用方法がある?
全シート名をセルに表示させることができると、色々便利です。
私もシートを多く持つエクセルを操作することが多いため、実際に活用している内容をご紹介します!
目次シートとしての活用
シートが多いと、ファイルの内容を把握するのが大変ですよね。
そのようなとき、どのようなシートがあるかを把握できると便利です。
各シートの情報を一覧化
例えば各シートにある値を一覧表示したいと考えます。
そのときに、一つずつシートから値をコピペして、、、って大変ですよね。
そのようなとき、この目次シートとINDIRECT関数を組み合わせると、簡単に一覧を作成することができます!
今回は、シート名を一覧化したよこに、各都道府県の「面積」を表示させていきます。

ちなみに各都道府県のシートはこのようになっており、セルC6に「面積」を入力しています。

準備ができたら、ここでINDIRECT関数を使います!
INDIRECT関数って何?ということで、関数の書式を記載しました。
=INDIRECT(参照文字列,[参照形式]) ※参照形式は省略可
簡単に説明すると、INDIRECT関数は「指定したセルを見に行くよ~」という関数です!
どういうこっちゃ?ですよね。
文字で説明するのも難しいので、画像でわかりやすく解説していきます。
セルA1に「シート名一覧」と入力しています。
そこで、セルD2に「=INDIRECT(“A1”)」と入力しました。
すると、、、セルA1にある「シート名一覧」を表示しました!
このとおり、指定したセルを見に行き、その結果を返してくれました!

話を戻して、各シートにある「面積」をINDIRECT関数で一覧表示させます。
セルB2に、「=INDIRECT(A2&”!C6″)」と入力します。
(他シートを参照するときは「シート名!セル」と表示されるため、「!」を入力しています)

すると、、、北海道の面積が表示されました!あとは入力した数式を引っ張ると、、、

すべてのシートにある面積が表示されました!
これでわざわざ1シートずつ見に行かなくても、一つのシートに一覧を作ることができました!

便利なやり方だと思いますので、ぜひ活用して効率化アップに役立ててみてください!
各シートをリンク化
シートが大量にあると、まずそのシートを探すことに苦労しますよね。。
目次を作っておくと、そのページにリンクさせることも可能になります。
つまり、リンクを押したらそのページにとぶ、めっちゃ便利な方法があります!
今回は、シート名を一覧化したよこに、各シートにとぶリンクを作成します。

各シートにとぶリンクを作るには、HYPERLINK関数を使います。
名前から、リンク作ってくれそうな関数だな~って感じがしますね!
=HYPERLINK(リンク先,[別名]) ※別名は省略可
説明するまでもない気はしますが、HYPERLINK関数は「セルにリンクを作る」関数です!
ではさっそく、各シートにとぶリンクを作っていきたいと思います!
リンクを表示したいセルに、「=HYPERLINK(“#'”&A2&”‘!A1”,A2)」と入力します。
こう設定することで、「セルA2に記載しているシートのセルA1にとびますよ~」ということが表現できています!
(#は同じブック内のリンクを作るときに必要なルールみたいなものです)

すると、、、北海道シートのリンクが表示されました!
実際にクリックしてみると、、、ちゃんと北海道シートにとぶことができました!感動ですね!

あとは同様に数式をコピーしていくと、全シートのリンクを作成することができました!

これでいちいちシートを探す必要がなくなりましたね!
リンクの横にシートの説明文などを載せると、共有する人にもわかりやすいファイルができるので、一目置かれること間違いなし!(笑)
ぜひこちらも活用して効率化アップに役立ててみてください!
セルの値をシート名に反映する方法
例えば同じ内容のシートを使うんだけど、複数シートをコピーして、一つずつシート名を変更するは面倒ですよね。。
実はVBAを使うと、セルに表示したいシート名を入力すれば、シートコピーとシート名変更を一括で行うことができます!
作業効率アップすること間違いなし!今回はその方法も紹介します!
コピーしたいシートを準備する
まずはコピーしたいシートを準備します。
こちらではわかりやすく、「テンプレート」シートを作成し、こちらをコピーしていきます。
(セルC4には、シート名を反映する数式を入力しています)

シート名としたい値をセルに入力する
コピーしたシートの名前にする値をセルに入力します。
今回は「参照」シートのセルA1~A13に、都道府県の一部を入力しましたので、こちらの名前でシートを作成していきます!

シートをコピー&シート名変更のVBAを作成する
最後にシートをコピー&シート名を変更するVBAを作成します。
今回はシート名・参照先を合わせたVBAを記載します。実際に使用するときは、使用するシート名や参照範囲に編集してご使用ください!
Sub テンプレートからシートを作成()
Dim rng As Range
Dim cell As Range
Dim sheetName As String
Dim templateSheet As Worksheet
Dim ws As Worksheet
Dim sheetExists As Boolean
' テンプレートのシート名
Const TEMPLATE_SHEET_NAME As String = "テンプレート"
' コピー元シートの存在チェック
On Error Resume Next
Set templateSheet = ThisWorkbook.Sheets(TEMPLATE_SHEET_NAME)
On Error GoTo 0
'「テンプレート」シートがなければ、注意メッセージを表示
If templateSheet Is Nothing Then
MsgBox "テンプレートシート '" & TEMPLATE_SHEET_NAME & "' が見つかりません。", vbCritical
Exit Sub
End If
'名前一覧が入力されているセル範囲を指定(シート名、参照範囲は必要に応じて変更)
Set rng = ThisWorkbook.Sheets("参照").Range("A1:A13")
For Each cell In rng
sheetName = Trim(cell.Value)
If sheetName <> "" Then
'同名シートが既に存在するか確認、あればそのシート名はスキップ
sheetExists = False
For Each ws In ThisWorkbook.Sheets
If ws.Name = sheetName Then
sheetExists = True
Exit For
End If
Next ws
'シートが存在しなければ、テンプレートをコピーして名前を変更
'同じシート名があれば、注意メッセージを表示
If Not sheetExists Then
templateSheet.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
ActiveSheet.Name = sheetName
Else
MsgBox "すでに存在するシートはスキップされました:" & sheetName, vbInformation
End If
End If
Next cell
MsgBox "シート作成が完了しました"
End Sub
実行すると、テンプレートシートをコピーし、指定したセルのシート名に変更されました!

VBAを使用すると、今まで手作業でやっていたことが自動化でき、とても便利ですね!
まとめ:シート名を自動化して効率化しちゃいましょう!
今回は、シート名を自動表示する方法、シート名を活用した応用技を紹介しました。
これらのテクニックは、業務効率化に貢献できること間違いなし!
ぜひ活用して、ともに業務効率化の道を歩みましょう(笑)
最後まで読んでいただき、ありがとうございました!
コメント