残業を減らす!Officeテクニック
Excelの表でシート名を利用するのに毎度手動でコピペする修行は不要! 関数で取得する方法
2022年11月7日 06:55
操作中のワークシート名を自動的にセルへ入力できないの? と思う瞬間がありませんか? 例えば、同じフォーマットの表を使い回したい時。元のワークシートをコピーして「(シート名) (2)」「(シート名) (3)」…、と自動的に命名されたシート見出しを修正するはずです。
そして、修正したワークシート名をそのままコピーしてセルに貼り付けていませんか? ダブルクリックしてシート名を全選択、[Ctrl]+[C]→[Ctrl]+[V]の流れ、地道な作業ですよね。10シート以上なら修行のようです。関数式を仕込んで回避しましょう。
CELL関数、MID関数、FIND関数の3つを組み合わせ方が多少複雑ですが、一回入力すれば使い回せます。ひとつずつ見ていきましょう。
CELL関数でワークシート名を取得する
CELL(セル)関数は、マイナーだと思いますが、ワークシート名の取得には定番の関数です。構文は以下の通り。ワークシート名を取得する場合、引数[検査の種類]は「"filename"」と覚えてください。[参照]はワークシート内のいずれのセル番地でも構いません。「A1」でOKです。
つまり、セルA1に「=CELL("filename",A1)」と入力すれば、パスを含むファイル名とワークシート名を取得できます。ただし、どこでも構わないのでファイルは保存しておいてください。新規作成した未保存のファイルでは結果が空白になります。
CELL関数の結果は、ファイルのパス、角括弧([])でくくられたファイル名、ワークシート名の順に表示されていることがわかります。この結果からワークシート名を取り出していきましょう。
MID関数とFIND関数でパス名を処理する
最終的に欲しいのはワークシート名(ここでは「1-4月実績」)なので、パスとファイル名が邪魔ですよね。MID関数とFIND関数で処理します。ここで構文を復習しておきましょう。
まずはMID関数の動作を確認してみます。CELL関数の結果は「C:UsersmadoDesktop[1-4月実績.xlsx]1-4月実績」でした。ファイル名とワークシート名の区切り「]」(35文字目)より後ろが取り出せればいいわけです。
任意のセル(ここではセルA8)に「=MID(A1,36,99)」と入力します。「]」以降を取り出したいので、引数[開始位置]に「36」、引数[文字数]には何文字あってもいいように「99」と指定しました。なお、ワークシート名は31文字までに制限されているので、引数[文字数]は「31」としても構いません。
残る課題はファイル名とワークシート名の長さです。作業環境によってパスとファイル名は異なるため、先ほどのように「36」とは指定できませんよね。
そこで、FIND関数を利用します。FIND関数は、引数[検索文字列]に指定した文字列を[対象]から検索してその開始位置を文字数で返しますます。CELL関数の結果にはファイル名の一部として「]」が含まれるので「]」の位置がわかれば解決です。任意のセル(ここではセルA9)に「=FIND("]",A1)」と入力します。
FIND関数の結果「35」が表示されました。この例では「]」が35文字目ということです。「]」を検索した結果なので、この数式は汎用的に利用できそうです。「+1」して、MID関数の引数[開始位置]に使えますよね。MID関数とFIND関数の数式を組み合わせると、以下のようになります。組み合わせた数式の結果も正しいことがわかります。
CELL関数を組み合わせる
ここまで来ればあと一歩です。最初に入力したCELL関数を組み込みましょう。MID関数とFIND関数を組み合わせた数式「=MID(A1,FIND("]",A1)+1,99)」の「A1」(セルA1)にはCELL関数が入力されているので、「A1」を「=CELL("filename",A1)」に置き換えれば完成です。
=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,99)
ワークシート名を変更して動作を確認してみましょう。ワークシート名とセルA1が連動するはずです。