こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ネット上Excelで、シート名をセルに表示するに

Excel2003です。ネットワーク上に保存してあるExcelのA1セルに拡張子なしのファイル名を表示するにはどうしたらいいでしょうか?
自分のPCに保存してある場合は以下で表示出来るのですがネットワーク上に保存すると表示されなくなってしまいます。=REPLACE(LEFT(CELL("filename",$A$1),FIND(".",CELL("filename",$A$1))-1),1,FIND("[",CELL("filename",$A$1)),)

投稿日時 - 2013-04-26 23:09:18

QNo.8061176

すぐに回答ほしいです

質問者が選んだベストアンサー

#1 #2 です。

>関数一つ一つの意味を勉強しなければと思っています。

=CELL("filename")
というのは、[CELL 関数] のヘルプを見ると、
>対象範囲を含むファイルの名前 (絶対パス名) を表す文字列。
と出ています。

'---------------------------------------------------

 ファイルがネットワーク上にあって、ネットワークドライブの割り当てがなされていない場合には、「絶対パス名」は
\\{IPアドレス}\{共有フォルダ}\{子フォルダのパス}\[{ファイル名}.{拡張子}]{シート名}
というような書式になっているのではないかと存じます。

 このとき、{IPアドレス} というのは、「192.168.***.***」というような文字列ですので、必ず「.」を含みます。

 ネットワークドライブの割り当てがなされている場合、例えば、
\\{IPアドレス}\{共有フォルダ}\
を「Z:\」ドライブに割り当てしているような場合は、上記の「絶対パス名」は
Z:\{子フォルダのパス}\[{ファイル名}.{拡張子}]{シート名}
となりますので、フォルダ名やファイル名に「.」が含まれない限り、「.」は {拡張子} の前にしか存在しません。

'===================================================

 さて、ご質問文内でお示しの式は、
=REPLACE(LEFT(CELL("filename",$A$1),FIND(".",CELL("filename",$A$1))-1),1,FIND("[",CELL("filename",$A$1)),)
ですが、これを [REPLACE 関数の引数] ダイアログ で見ると、
1)文字列:LEFT(CELL("filename",$A$1),FIND(".",CELL("filename",$A$1))-1)
2)開始位置:1
3)文字数:FIND("[",CELL("filename",$A$1))
4)置換文字列:<空白(無)>
となっています。

 「CELL("filename",$A$1)」の部分を「{絶対パス名}」に置き換えると、
1)文字列:LEFT({絶対パス名},FIND(".",{絶対パス名})-1)
3)文字数:FIND("[",{絶対パス名})
となります。


 「1)文字列」の式を、再度 [LEFT 関数の引数] ダイアログ で見ると、
5)文字列:{絶対パス名}
6)文字数:FIND(".",{絶対パス名})-1
となっています。

 (6)「FIND(".",{絶対パス名})-1」というのは、「{絶対パス名} の最初から『.』を検索して最初に現われる位置から 1 を引いた」文字数ですから、{拡張子} の前以外に「.」がない場合には、{絶対パス名} の内、拡張子の前の「.」までの文字数になります。
 したがって、
1)LEFT({絶対パス名},FIND(".",{絶対パス名})-1)
は「拡張子の前の『.』までの文字列」ということになります。

 一方、(3)「FIND("[",{絶対パス名})」の方は、「{絶対パス名} の最初から『[』を検索して最初に現われる位置」の文字数ですから、「{ファイル名} の直前までの文字数」ということになります。

 したがって、「『1)文字列』の最初から『3)文字数』分を『4)<空白(無)>』に REPLACE する」ということは、
「拡張子の前の『.』までの文字列」= Z:\{子フォルダのパス}\[{ファイル名}
から
「{ファイル名} の直前までの文字」列 = Z:\{子フォルダのパス}\[
を削除することになりますので、したがって、[REPLACE 関数] の計算の結果、(拡張子を含まない)「{ファイル名}」が残ることになります。

'---------------------------------------------------

 話を戻しますが、上記は、「{拡張子} の前以外に『.』がない場合」のお話しであって、「{絶対パス名} の中に {IPアドレス} が ある」場合には、「必ず『.』を含」みますから、話が変わります。

 この場合は、(6)「FIND(".",{絶対パス名})-1」というのは、「{絶対パス名} の最初から『.』を検索して最初に現われる位置から 1 を引いた」文字数ですから、普通は「\\192.」の内の「\\192」の文字数になります。
 したがって、
1)LEFT({絶対パス名},FIND(".",{絶対パス名})-1)
は「\\192」ということになります。

 一方、(3)「FIND("[",{絶対パス名})」の方は、「{絶対パス名} の最初から『[』を検索して最初に現われる位置」の文字数ですから、上記同様「{ファイル名} の直前までの文字数」ということになります。

 したがって、「『1)文字列』の最初から『3)文字数』分を『4)<空白(無)>』に REPLACE する」ということは、
「\\192」から
「{ファイル名} の直前までの文字列」= \\192.168.***.***\{共有フォルダ}\{子フォルダのパス}\[
の文字数(少なくとも「\\192」より長い文字数)を削除することになりますので、したがって、[REPLACE 関数] の計算の結果、何も残らない、
>→ネット上保存だと何も表示されなくなってしまいます。
ということになってしまいます。

'===================================================

>関数一つ一つの意味を勉強しなければと思っています。
ということで、敢えて長々と前置きを書きましたが、上記のことは、「予め用意された(ネットで拾ってきたような)数式」があるからややこしいことになっているのであって、本来は、「目的の答えを出すための、その目的専用の数式」を自ら考えて式立てすべきかと存じます。

 ファイルがネットワーク上にあって、ネットワークドライブの割り当てがなされていない場合には、「絶対パス名」は
\\{IPアドレス}\{共有フォルダ}\{子フォルダのパス}\[{ファイル名}.{拡張子}]{シート名}
となる訳ですから、この場合は、
\\{IPアドレス}\{共有フォルダ}\{子フォルダのパス}\[{ファイル名}
から
\\{IPアドレス}\{共有フォルダ}\{子フォルダのパス}\[
を削除するとか、
{ファイル名}.{拡張子}]{シート名}
から
.{拡張子}]{シート名}
を削除する、というような考え方で、式立てをする必要があります。

 ということで、#1 や #2 の式を提供させていただいた訳であって、私が例示した式が必ずしも正しいというようなことではありません。
 要は、求める答えが出さえすれば良いわけで、
=MID(CELL("filename"),FIND("[",CELL("filename"))+1,FIND(".xls",CELL("filename"))-FIND("[",CELL("filename"))-1)
でも、
=MID(REPLACE(CELL("filename"),FIND(".xls",CELL("filename")),100,""),FIND("[",CELL("filename"))+1,100)
でも構いません。

'===================================================

>以下のようにファイル名の前も書き出されてしまいました。
>\\***.**.***.**\○○○_○○○_********\○○\○○○\○○○○\○○○○
(*は数字、○は文字)

 これは、
=CELL("filename")
の答えですよね?

 でしたら、当たり前の挙動で、
\\***.**.***.**\ → \\{IPアドレス}\
○○○_○○○_******** → {共有フォルダ}
\○○\○○○\○○○○\○○○○ → \{子フォルダのパス}
となって、この後に、
\[{ファイル名}.{拡張子}]{シート名}
が続くはずです。

投稿日時 - 2013-05-12 23:03:50

補足

その後いただきました内容を勉強させていただきました。
ネットの関数式を流用して内容が理解出来ていなかった為
恥かしながら関数式中のドットの位置やファイル名"["で始まるなど今回わかりました。
ネストを完璧に理解するのはまだ時間掛かりますが引き続き勉強していきたいと思います。
ご親切に詳細にわたりご説明いただき本当に有り難うございました。

投稿日時 - 2013-05-16 23:46:40

お礼

長文の御回答有難うございます。恐縮です。
一つ一つ確認させていただきたいと思います。
今しばらくお時間を下さい。
まずは御礼まで。

投稿日時 - 2013-05-13 23:05:34

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

#1 です。

#1 が原因の場合は、この方が式がすっきりしてますかね。
=SUBSTITUTE(REPLACE(CELL("filename",$A$1),FIND(".xls",CELL("filename",$A$1)),100,""),INFO("directory") & "[","")

投稿日時 - 2013-04-27 09:26:34

補足

連休明けてネット上で確認しましたところ
以下のようにファイル名の前も書き出されてしまいました。
関数一つ一つの意味を勉強しなければと思っています。

\\***.**.***.**\○○○_○○○_********\○○\○○○\○○○○\○○○○
(*は数字、○は文字)

投稿日時 - 2013-05-11 10:23:20

お礼

回答有難う御座いました。

> 何というエラーが出ているのでしょうか?
→ネット上保存だと何も表示されなくなってしまいます。

> また、そのブックに
> =CELL("filename")
> と入力したときにエラーの出るPC、出ないPCで、それぞれなんと表示されますか?
→=CELL("filename")と入力したときですがちょうど連休に入ってしまいましたので連休明けに確認させて下さい。

投稿日時 - 2013-04-27 20:45:56

ANo.1

>ネットワーク上に保存すると表示されなくなってしまいます。
 原因はこれでしょうかねぇ?

http://www.excel.studio-kazu.jp/kw/20100422091608.html
【症状】
>=CELL("filename")を入れると
>エラーが出るPCには、\\IPアドレス\ネットワークドライブ名\\フォルダ名\[ファイル名]が出ました。
>エラーが出ないPCには、ネットワークドライブ名:\フォルダ名\[ファイル名]です。

【原因】
>IPアドレスに「.」が含まれているためじゃないですか?

【解決法】
=SUBSTITUTE(SUBSTITUTE(CELL("filename",$A$1),INFO("directory") & "[",""),MID(CELL("filename",$A$1),FIND(".xls",CELL("filename",$A$1)),100),"")

みたいな感じでいかがでしょうか?

投稿日時 - 2013-04-27 09:16:50

あなたにオススメの質問