【関数】自ブックのフォルダーパス/ブック名/シート名を取得できる「CELL」+文字列操作関数の組み合わせテクニック
AさんAさん

開いているブックのブック名やシート名をワークシート上で使えたら、もっと自動化できそうな気がしますが、そんな関数ありますかね?

森田森田

単一の関数では実現できないですが、関数の「CELL」と文字列操作関数を組み合わせることで実現できますよ!
では、具体的に解説していきますね。

はじめに

この記事はCELLの使い方を把握していることが前提です。

参考記事

関数のCELLの詳細は以下の記事をご参照ください。

自ブックのフォルダーパス/ブック名/シート名をワークシート上へ自動取得できると効率化の幅が広がる

関数でセルの情報を利用する場合、その対象のほとんどは「値」です。

しかし、場合によってはセルの値以外の情報を利用した方が効率化を図れるケースがあるもの。

たとえば、同じブックの中で複数の類似シートを管理している際、表のタイトルをシート名と同じ名称にしたい場合、通常はコピペ等の手作業が必要です。

手作業だとコピペ誤りや更新漏れが発生するリスクがあります。

この場合、表のタイトルとなるセルへシート名を取得できれば、シート名の更新のみで表のタイトルが自動で同期され時短になりますね。

このように、自ブックのフォルダーパス/ブック名/シート名を取得できることで、自動化できる範囲が広がります。

よって、実務でフォルダーパス/ブック名/シート名を取得が必要な場合は、CELLと文字列操作関数の組み合わせテクニックを活用しましょう。

CELLと文字列操作関数を組み合わせれば、自ブックのフォルダーパス/ブック名/シート名を取得可能!

自ブックのフォルダーパス/ブック名/シート名を取得する場合、CELLでフルパス名を取得し、その文字列から必要な部分を文字列操作関数で抽出します。

先ほどの表のタイトルとなるセルへシート名を取得したい場合であれば、CELLに加え、MIDFINDLENの文字列操作関数を組み合わせた数式にしました。

これで、自ブックのフォルダーパス/ブック名/シート名を取得が可能となります。

フォルダーパス/ブック名/シート名取得の数式例

CELLで取得できるフルパス名は以下の通りです。

フォルダーパス\[ブック名]シート名

OneDrive配下に格納したブックの場合、フォルダーパス部分はURL形式(https://~)で表示。
ブック名は拡張子(.xlsx等)も含む。

このフルパス名から、必要な部分を文字列操作関数で抽出していけばOKです。

なお、抽出するために使う関数や組み合わせパターンはいろいろありますが、参考までに抽出対象別の数式例を順番に解説していきます。
今回はフルパス名と別の数式でフォルダーパス/ブック名/シート名を抽出する数式を用意(1つの数式だけで行う場合、各数式の「B2」部分を「CELL("filename",B2)」へ置き換える)。

フォルダーパス

フォルダーパスを取得する場合、フルパス名(フォルダーパス\[ブック名]シート名)の始め角カッコ([)を区切り文字として抽出すると良いでしょう。

今回はLEFTFINDを用いて始め角カッコ([)の左側の文字(フォルダーパス)を抽出しました。

FINDで始め角カッコ([)がフルパス名の何文字目にあるか計算し、その1文字前までをLEFTで抽出しています。

なお、実務でフォルダーパスを使う例としては、外部データを取得するクエリを相対パスにする前準備に活用する等です。

参考記事

関数のLEFTFINDの詳細は以下の記事をご参照ください。


ブック名

ブック名を取得する場合、フルパス名(フォルダーパス\[ブック名]シート名)の始め角カッコ([)と終わり角カッコ(])の2種類の区切り文字を使って抽出すると良いでしょう。

今回はMIDFINDを用いて始め角カッコ([)と終わり角カッコ(])の中にある文字(ブック名)を抽出しました。

FIND3つもあってややこしいですが、それぞれ次の用途です。

  • MIDの引数「開始位置」のFIND:抽出する位置を始め角カッコ([)の1文字後に指定
  • MIDの引数「文字数」のFIND×2:終わり角カッコ(]-始め角カッコ([-1でブック名の文字数を計算

後者のブック名の文字数計算はややこしいため、視覚的に分解すると次のようなイメージです。

まとめると、FIND×3で始め角カッコ([)の1文字後からブック名の文字数分を抽出しています。

なお、実務でブック名を使う例としては、ハイパーリンクのジャンプ先(ブック内)を関数で可変にする等です。

参考記事

関数のMIDの詳細は以下の記事をご参照ください。

シート名

シート名を取得する場合、フルパス名(フォルダーパス\[ブック名]シート名)の終わり角カッコ(])を区切り文字として抽出すると良いでしょう。

今回はMIDFINDLENを用いて終わり角カッコ(])の右側の文字(シート名)を抽出しました。

FINDで終わり角カッコ(])がフルパス名の何文字目にあるか計算し、その1文字後から残りすべての文字をMIDで抽出しています。

なお、実務でシート名を使う例としては、表のタイトルとシート名を同期させる等です。

参考記事

関数のLENの詳細は以下の記事をご参照ください。

サンプルファイルで練習しよう!

可能であれば、以下のサンプルファイルをダウンロードして、実際に操作練習をしてみてください。

サンプルファイル_ワークシート関数_CELL.xlsx

サンプルファイルのダウンロードには無料メルマガに登録いただく必要があります(上記リンクから登録フォームへ遷移します)。

ブックを開いたら、「9月実績」シートで次の手順を実施してください(シート名の取得)。

  1. 関数を挿入するセルを選択
    ※今回はA1セル
  2. =mi」等と入力
  3. サジェストから「MID」を選択し、「Tab」キーで確定
  4. 抽出対象のセルを選択
    ※今回は「CELL("filename",A1)」の数式
  5. コンマ(,)を入力
  6. 任意の開始位置を指定
    ※今回は「FIND("]",CELL("filename",A1))+1」の数式
  7. コンマ(,)を入力
  8. 任意の文字数を指定
    ※今回は「LEN(CELL("filename",A1))」の数式
  9. Enter」キーで確定

本記事の解説と同じ結果になればOKです!

さいごに

いかがでしたでしょうか?

CELL+文字列操作関数の組み合わせテクニックは、自ブックのフォルダーパス/ブック名/シート名をワークシート上へ取得するのに役立ちます。

フォルダーパス/ブック名/シート名を使い、自動化の幅を広げられる際に活用しましょう。

なお、CELL+文字列操作関数以外にもExcel関数の各種テクニックを拙著で解説していますので、こちらも参考にしてみてください。



ご参考になれば幸いですm(_ _)m

森田森田

CELLVBAでいうところのプロパティ的な働きをしてくれる関数なので、VBAを入力するまでもない処理なら本記事のテクニックで解決できると思います。
ただし、複数の関数を組み合わせる関係上、数式は長く複雑になるため、最初は関数ごとに数式を分けて段階的に検証することをおすすめします。