*nixで過ごす日々

PCでの作業に役立つ情報を提供するブログ

Excelでシート名を取得する (Teams対応、マクロ無し版有り)

Excelを使っている時にシート名を取得したいことがあると思う。
色々と方法はあるのでいくつか紹介する。

方法1. CELL関数を使う

=RIGHT(CELL("filename",A1),LEN(CELL("filename",A1))-FIND("]",CELL("filename",A1)))

よく紹介されているやつ。
CELL関数でファル名を取得するとfile\path\[filename.xlsx]シート名という値が取れる。
これを色々と細工してシート名の部分のみを抜き出す。
いろいろな所で紹介されているため詳細の解説は割愛する。

方法2. 目次を自動作成して参照する

マクロを使う方法のうち、比較的簡単にできる方法を紹介する。

手順1. 名前付き範囲を登録する

  1. 「数式」タブ>「名前の管理」を押下
  2. 「新規作成」押下
  3. 名前に任意の文字列を入力 (例 sheet_names)
  4. 参照範囲に=TEXTAFTER(GET.WORKBOOK(1), "]")を入力
  5. 「OK」を押下

手順2. シートに名前付き範囲を出力する

  1. 任意のセルに=TRANSPOSE(sheet_names)と入力する
    (sheet_namesは手順1.で付けた名前にする)

手順3. 取得したいシート名の部分を参照する

シートが「目次」「2024」「2023」・・・とあったとする。
また、シート名の一覧は「目次」シートのA1から縦に展開されているとする。
「2024」シートでそのシート名を取得するには=目次!A2とすれば良い。

方法3. 色々と細工して取得する

CELL関数はアプリ版のExcelでのみサポートされている。
そのためWEB版やTeamsで開いた時にCELL関数が解釈出来ず#VALUE!と表示されてしまう。
WEB版やTeamsでもシート名を正しく表示するには別の方法を使わないといけない。
VBAを使うとなんでもできるが、職場によってはマクロ(=VBA)禁止となっているところもあると思う。
そういう場合でも色々と細工すればCELL関数とVBAを使わずにシート名を取得する方法があるので紹介する。
ただし、かなりの力技になるので、作業用のセルやシートを作成したくない人は諦めるかマクロの使用許可をもらう方が良いだろう。

この続きはcodocで購入