タグ: LET

  • [Excel]ワークシート名を取得

     ウェブやモバイルのエクセルでは CELL関数 がサポートされていないそうです

    ワークシート名を取得する関数

     Excelのワークシート名をセルに表示するためにCELL関数を使います。CELL関数の戻り値にはファイルパスとワークシート名を含むため、ワークシート名を抽出する必要があります

    =CELL("filename")
     または
    =CELL("filename",A1)
    
     ↓
    "https://・・・/一部のフォルダ名/[ファイル名.xls]シート名"

     上の式にある『A1』は範囲を表します。現在のワークシートのA1セルという意味です。A2でもB1でもOKです。現在のワークシートのどこかを指していれば何でもOKです
     範囲を省略することもできますが、別のワークシートで同じ式が使われると、こちらの計算結果も別のワークシートのものと同じになるそうです。きっとキャッシュが絡んだ問題なのでしょう

    現在の Excel ファイルの名前、パス名、またはワークシート名をセルに挿入する - Microsoft

    CELL 関数 - Microsoft

    文字列からワークシート名を抽出

     CELL(“filename”)の戻り値に含まれる最後の角括弧(])より右側がワークシート名になります

    簡易に最初の角括弧より右側をとる式はこちら
    =LET(FN,CELL("FILENAME",A1),MID(FN,FIND("]",FN)+1,LEN(FN)))
    
    きちんと最後の角括弧より右側をとる式はこちら
    =LET(FN,CELL("FILENAME",A1),IF(ISERROR(FIND("]",FN)),"",MID(FN,FIND(決して使われない記号,SUBSTITUTE(FN,"]",決して使われない記号,LEN(FN)-LEN(SUBSTITUTE(FN,"]",""))))+1,LEN(FN))))
     ※注:「決して使われない記号」はパスやワークシート名に含まれない1文字

     きちんと最後の角括弧より右側をとる式はとても長いです。何をしているか説明します

    1. CELL(“FILENAME”,A1)」で、ワークシート名を含む値を取得して値の名前をFNにします
    2. IF(ISERROR(FIND(“]”,FN)),””,」で、FN値に角括弧が含まれていないときはブランクを返して終わります
    3. LEN(FN)-LEN(SUBSTITUTE(FN,”]”,””))」で、角括弧の数を調べます。角括弧をすべて取り除いたFN値の長さと、元のFN値の長さを比べることで、角括弧の数を調べています
    4. SUBSTITUTE(FN,”]”,決して使われない記号,角括弧の数)」で、一番最後の角括弧を決して使われない記号に置き換えます
    5. FIND(決して使われない記号,一番最後の角括弧を決して使われない記号に置換したFN値)」で、一番最後の角括弧の位置を特定します
    6. MID(FN,一番最後の角括弧の位置+1,LEN(FN))」で、一番最後の角括弧よりも右側を取得します

    感想

     こういった関数型の言語は「ローコード」とか言われて簡単に使えそうな雰囲気を醸し出すのに成功しています。でもこのように長いコードになると「読めない・理解できない」です。