Microsoft365のExcelでは、新しい関数の中に、
・VBAを使用せず、カスタム関数を作成できるLAMBDA 関数
・指定した文字の前を抽出できるTEXTBEFORE 関数
・指定した文字の後を抽出できるTEXTAFTER 関数
があります。
これら新しい関数の使い方の備忘録として、Excelファイルの保存場所(フォルダ・フルパス等)を取得する関数を作成したメモ。
結論としては、次の印象。
LAMBDA関数は、複雑な数式では有用。
TEXTBEFORE/ TEXTAFTER 関数は、従来のLEFT関数やFIND関数などの組み合わせより、シンプルに文字列を抽出可能。
使用例
この事例の前提知識として、CELL(“filename”,A1)で、当該ファイルのフォルダ名、ファイル名、sheet名が次のように取得できる(活用の事例はこちらにも記載)。
例)C:\Users\aaa\Desktop\[売上データの統合.xlsm]設定
ファイル名は、角括弧 [] で括られた範囲に記載。
当該ファイルのシート名は、“]”の後に記載される。
この事例では、シート名は“設定”
フォルダの取得例
次のような当該ファイルがあるフォルダ部分を抽出する。
例)C:\Users\aaa\Desktop\
従来の方法(LEFT関数、FIND関数の使用)
=LEFT(CELL("filename",A1),FIND("[",CELL("filename",A1))-1)
LAMBDA関数での方法(LEFT関数、FIND関数の使用)
上記の式が次のようになる。
=LAMBDA(x,LEFT(x,FIND("[",x)-1))(CELL("filename",A1))
任意で設定した変数xに、CELL(“filename”,A1)を代入。
なお、次のように変数に日本語(例:文字列)を利用しても適切に計算された(他への影響は未確認)
=LAMBDA(文字列,LEFT(文字列,FIND("[",文字列)-1))(CELL("filename",A1))
TEXTBEFORE関数での方法
=TEXTBEFORE(CELL("filename",A1),"[")
今回の方法の中で、最もシンプルに抽出可能
ファイル名の取得例
次のような当該ファイルのファイル名を抽出する。
例)売上データの統合.xlsm
従来の方法(MID関数、FIND関数の使用)
=MID(CELL("filename",A1),FIND("[",CELL("filename",A1))+1, FIND("]",CELL("filename",A1))-FIND("[",CELL("filename",A1))-1)
LAMBDA関数での方法(MID関数、FIND関数の使用)
=LAMBDA(x,MID(x,FIND("[",x)+1, FIND("]",x)-FIND("[",x)-1))(CELL("filename",A1))
任意で設定した変数xに、CELL(“filename”,A1)を代入で、従来の方法より少しすっきりとする。
TEXTBEFORE/ TEXTAFTER 関数での方法
=TEXTBEFORE(TEXTAFTER(CELL("filename",A1),"["),"]")
こちらも、今回の方法の中で最もシンプルに抽出可能
フルパスの取得例
次のような当該ファイルのフルパスを抽出する。
例)例)C:\Users\aaa\Desktop\売上データの統合.xlsm
従来の方法(SUBSTITUTE関数、LEFT関数、FIND関数の使用)
=SUBSTITUTE(LEFT(CELL("filename",A1),FIND("]",CELL("filename",A1))-1),"[","")
LAMBDA関数での方法(SUBSTITUTE関数、LEFT関数、FIND関数の使用)
=LAMBDA(x,SUBSTITUTE(LEFT(x,FIND("]",x)-1),"[",""))(CELL("filename",A1))
TEXTBEFORE/ TEXTAFTER 関数での方法
=TEXTBEFORE(CELL("filename",A1),"[")&TEXTBEFORE(TEXTAFTER(CELL("filename",A1),"["),"]")
なお、 LAMDA関数は「名前の定義」と併せて利用するのが基本の考え方のようで、複雑な式、繰り返し利用する場面では有効と思う。
以上、Excelファイルの保存場所(フォルダ・フルパス等)を取得する数式をLAMBDA関数とTEXTBEFORE/ TEXTAFTER関数を使用して作成したサンプルでした。