エクセルのシート名を取得

エクセルのシート名を取得する方法について。

請求書や見積書など、エクセルのシートをコピーして
通し番号で管理するケースは良くあると思う。

シート名を変えて、そのシート名と同じ文言に合わせて
セルに入力するのでは効率が悪いし
何より入力忘れというミスを招いてしまうので
自動的にシート名を取得して表示する方法があると便利だ。

以前から使っている関数であるが、
メモ書きも兼ねて投稿をする。

 

答えから記載すると下記のような式になる。

=MID(CELL(“filename”,$A$1),FIND(“]”,CELL(“filename”,$A$1))+1,31)

 

順番に仕組みを解説すると、
まずはCELL関数のfilenameについて。

=CELL(“filename”)
と入力をするとそのファイル名のフルパスとシート名が表示される。

※後日追記
カンマ区切りでどこかのセルを指定しないとエラーが出る事が分かったので
=CELL(“filename”,$A$1) と修正します。

 

実際に入力するとこんな感じ。

CELL関数を入れた画面

※エクセルを保存する前だと保存場所が取得できずエラーになるので注意。

このままではフルパスの部分が不要なので
前のほうを削除をする必要がある。

C:\Users\ユーザー名\Desktop\[Book1.xlsx]シート名テスト

シート名の直前にある文字列、角括弧の閉じ ] に注目をして、
FIND関数を使って ] の位置を調べる。

=FIND(“]”,CELL(“filename”))

FIND関数を入れた画面

すると「35」という値が返ってくる。
これは ] が文字列の先頭から35番目の文字だという事を表している。

つぎにMID関数を使って35番目以降の文字を取り出す。
取り出す文字数は100でも1000でもいいが、
エクセルのシート名は31文字以上にできないので
31を最大値として取り出す事とする。

=MID(CELL(“filename”),FIND(“]”,CELL(“filename”)),31)

すると結果はこうなる。

MID関数を入れた画面

先頭から35番目の文字から後ろの31文字を取り出したかたちだが、
これではあたまに ] が入ってしまい邪魔である。

なのでFIND関数で取り出した値に1を足して、
先頭から36文字目とする。

=MID(CELL(“filename”),FIND(“]”,CELL(“filename”))+1,31)

※後日修正
=MID(CELL(“filename”,$A$1),FIND(“]”,CELL(“filename”,$A$1))+1,31)

シート名を取得した画面

 

これでシート名を取り出す事ができる。