回答:
Microsoft は、シート名を取得するために配列数式を使用する必要があるかもしれないと説明しています。
現在のワークシートの名前を表示するには、配列数式として次の数式を入力します
=RIGHT(CELL("filename"),LEN(CELL("filename"))- MAX(IF(NOT(ISERR(SEARCH("\",CELL("filename"), ROW(1:255)))),SEARCH("\",CELL("filename"),ROW(1:255)))))
ここで、「filename」は文字通り引用符で囲まれた「filename」です。
注:この式は配列式として入力する必要があります。数式を配列数式として入力するには、Ctrl + Shift + Enterキーを押します。
また、これはプラットフォームに大きく依存していることに注意してください。Macでは、異なるパス区切り文字を使用するため、異なる数式が必要になります。また、OpenOffice.orgやその他の代替物では動作が異なる場合があります。保存していないワークブックで使用する場合は、#VALUE!
代わりに取得できます。
配列数式を使用しない場合、次のようにワークブックの名前(ファイル名の最後の部分)を取得できます。
次の式で使用されるように、ワークブックの名前のみを返すには:
=MID(CELL("filename"),SEARCH("[",CELL("filename"))+1, SEARCH("]",CELL("filename"))-SEARCH("[",CELL("filename"))-1)
M $ EXCELおよびLibreOffice CALCでテストおよび動作(式はスペイン語):
=EXTRAEB(CELDA("filename");SI(ESERROR(1+HALLAR("]";CELDA("filename")));SI(ESERROR(3+HALLAR("'#$";CELDA("filename")));0;3+HALLAR("'#$";CELDA("filename")));1+HALLAR("]";CELDA("filename")));LARGO(CELDA("filename")))
注:他の数式内に収まる、または1つのセルのみを使用するのは1つの巨大な数式です。
英語で考えると:EXTRAEBはMIDB、CELDAはCELL、SIはIF、ESERRORはISERROR、HALLARはFIND、LARGOはLENGTHです。
このような巨大な数式を複数のセルに分割すると、同じものが複数回呼び出されるのを避けるためにはるかに優れています。
=CELDA("filename")
=1+HALLAR("]";<CellReferenceFor_1>)
=3+HALLAR("'#$";<CellReferenceFor_1>)
=ESERROR(<CellReferenceFor_2>;)
=ESERROR(<CellReferenceFor_3>;)
=EXTRAEB(<CellReferenceFor_1>;SI(<CellReferenceFor_4>;SI(<CellReferenceFor_5>;0;<CellReferenceFor_5>);<CellReferenceFor_4>);LARGO(<CellReferenceFor_1>))
シート名の取得が非常に複雑である一方で、シートリストでのシート位置の取得が最新のスプレッドシートでは非常に簡単なのはなぜですか(警告、EXCEL 2000ではこの名前は存在しません)。 =HOJA(A1)
そして別のこと:関数が各言語で異なって呼び出される理由、M $ EXCELがスペイン語であり、英語のCALC(ロシア語、中国語などは言うまでもありません)がある場合はどうなりますか?大変な作業です。乗算イディオムのすべての関数名を覚えておく必要があります。
内部的には、特定の名前で保存されます。たとえば=SHEET(A1)
、; として=HOJA(A1)
保存されるものと同じ=_xlfn.SHEET(A1)
です。なぜすべてのイディオムで最後のイディオムを使用しないのですか?
または別の形式で言った:なぜ私はそれを英語で言えば、それが有効な関数名ではないと言う(CALC / M $ EXCELが英語でない場合)?
発生しないM $ ACCESSおよびSQL関数を使用すると、スペイン語バージョンではスペイン語ESNULO()
および英語で入力でき、ISNULL()
正しく使用できます。
両方を受け入れるのが複雑すぎる場合; さて、1つだけを受け入れて、イドムを増やすためにローカライズしないでください!
さて、質問に答えて、私はその巨大な式で使用するトリックは、]
存在するかどうかをテストすることです(M $ EXCEL)、そうでなければ存在するかどうかをテストすることです'#$
(LibreOffice CALC)=CELL("filename")
。それはとても奇妙です!
皮肉な質問で再び:なぜ彼らは追加され=SHEET(A1)
ていないの=SHEETNAME(A1)
ですか?それは私たち全員にとってより難しい仕事になります!
LibreOfficeでは、数式を次のように組み合わせました。最後の20の数字は、表示される文字の制限になります。
=(SUBSTITUTE(MID((RIGHT(CELL( "filename")、LEN(CELL( "filename"))-MAX(IF(NOT(ISERR(SEARCH( "\"、CELL( "filename")、ROW(1 :255:255))))、SEARCH( "\"、CELL( "filename")、ROW(1:255:255)))))))、FIND( "#$"、(RIGHT(CELL( "filename ")、LEN(CELL(" filename "))-MAX(IF(NOT(ISERR(SEARCH(" \ "、CELL(" filename ")、ROW(1:255:255))))、SEARCH(" \ "、CELL("ファイル名 ")、ROW(1:255:255))))))))+ 2,20)、1,1))