web-dev-qa-db-ja.com

どのExcel数式がシート名を返しますか?

Excel関数のドキュメントと一般的なMSDN検索を検索しましたが、VBAなしでシート名を返す方法を見つけることができませんでした。

VBAに頼ることなくExcelの数式でシート名を取得する方法はありますか?

18
SilS

Excelではあまり良くありませんが、私はこれらを見つけました ここ

=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,256)

およびA1は、シート内のエラーのないセルです。
シートの完全なパスと名前については、

=CELL("filename",A1)
15
Travis

最近のバージョンのExcelでは、式の構文は次のとおりです。

=MID(CELL("filename";A1);FIND("]";CELL("filename";A1))+1;255)
4
Orbit

これが合理的に短いもので、いくつかの利点があります:

  • しばしば無視されるREPT関数を使用して、逆ルックアップを行います(他のほとんどの答えは間違った方向に進みます)。
  • _A1_と比較してerrorsの可能性がかなり高いため、_$FZZ$999999_は不適切な選択のようです。
  • 絶対に忘れないでください。他の例の一部をコピーして貼り付けると、参照の変更が原因でエラーが発生する可能性があります。
  • _?_は、ファイルパスに含めないでください。

=SUBSTITUTE(RIGHT(SUBSTITUTE(CELL("Filename",$FZZ$999999), "]",REPT("?", 999)), 999),"?","")

3
PGSystemTester

以下はシート名を分離します:

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

他の回答で示されている数式は、ファイルパスに文字]が含まれている場合をサポートしていません。

以下の式はより複雑ですが、そのような場合を適切に処理できます。

 =MID(CELL("filename",A1),FIND("]",CELL("filename",A1),FIND("?",SUBSTITUTE(CELL("filename",A1),"\","?",LEN(CELL("filename",A1))-LEN(SUBSTITUTE(CELL("filename",A1),"\","")))))+1,LEN(CELL("filename",A1)))
2
mielk

私はすでにモジュールを開いていたので、カスタム関数を作成しました:

Public Function Sheetname (ByRef acell as Range) as string
Sheetname = acell.Parent.Name 
End Function 
1

ファイル名に角かっこ ']'が含まれていたため、角かっこの最後の出現を見つけるには、次のように上記の式を変更する必要がありました。これが、ファイル名/パスの0、1以上の角括弧で機能することを確認しました。

=RIGHT(CELL("filename"),LEN(CELL("filename")) - FIND("]]]",SUBSTITUTE(CELL("filename"),"]","]]]",LEN(CELL("filename"))-LEN(SUBSTITUTE(CELL("filename"),"]","")))))
  1. 置換関数を使用してすべての角括弧を置き換え、結果の長さとファイル名の長さを比較して、ファイル名の角括弧の数を識別します。
  2. 角括弧の出現回数を使用して、最後の角括弧を3つの連続する角括弧 ']]]'に置き換えます
  3. 検索機能を使用して、文字列内の3つの角かっこの位置を識別します
  4. フルパスの長さから3つの角かっこの位置を差し引きます
  5. 結果を使用して、適切なほとんどの文字(シート名)を取得します

ワークブックを最初に保存することに関する上記の以前のコメントも重要です。そうしないと、#Value!結果。

0
Jokey