No.3ベストアンサー
- 回答日時:
#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アドレス}\
○○○_○○○_******** → {共有フォルダ}
\○○\○○○\○○○○\○○○○ → \{子フォルダのパス}
となって、この後に、
\[{ファイル名}.{拡張子}]{シート名}
が続くはずです。
この回答への補足
その後いただきました内容を勉強させていただきました。
ネットの関数式を流用して内容が理解出来ていなかった為
恥かしながら関数式中のドットの位置やファイル名"["で始まるなど今回わかりました。
ネストを完璧に理解するのはまだ時間掛かりますが引き続き勉強していきたいと思います。
ご親切に詳細にわたりご説明いただき本当に有り難うございました。
長文の御回答有難うございます。恐縮です。
一つ一つ確認させていただきたいと思います。
今しばらくお時間を下さい。
まずは御礼まで。
No.2
- 回答日時:
#1 です。
#1 が原因の場合は、この方が式がすっきりしてますかね。
=SUBSTITUTE(REPLACE(CELL("filename",$A$1),FIND(".xls",CELL("filename",$A$1)),100,""),INFO("directory") & "[","")
この回答への補足
連休明けてネット上で確認しましたところ
以下のようにファイル名の前も書き出されてしまいました。
関数一つ一つの意味を勉強しなければと思っています。
\\***.**.***.**\○○○_○○○_********\○○\○○○\○○○○\○○○○
(*は数字、○は文字)
回答有難う御座いました。
> 何というエラーが出ているのでしょうか?
→ネット上保存だと何も表示されなくなってしまいます。
> また、そのブックに
> =CELL("filename")
> と入力したときにエラーの出るPC、出ないPCで、それぞれなんと表示されますか?
→=CELL("filename")と入力したときですがちょうど連休に入ってしまいましたので連休明けに確認させて下さい。
No.1
- 回答日時:
>ネットワーク上に保存すると表示されなくなってしまいます。
原因はこれでしょうかねぇ?
http://www.excel.studio-kazu.jp/kw/2010042209160 …
【症状】
>=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),"")
みたいな感じでいかがでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- その他(プログラミング・Web制作) Pythonを勉強しています。 5 2023/08/25 09:51
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2023/01/20 14:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【スプレドシート】IMPORTRANGE...
-
Microsoft 365のディフェンダー...
-
英数字のみ全角から半角に変換
-
MicrosoftOfficeの1ユーザー2...
-
MicrosoftOffice2019なんですが、
-
会社PCのメールが更新されない
-
Excel 日付を比較したら、同じ...
-
【Excel VBA】PDFを作成して,...
-
Microsoft Formsの「個人情報や...
-
outlookのメールが固まってしま...
-
Outlook で宛先が複数の場合の人数
-
Office 2021 Professional Plus...
-
エクセル関数について
-
マイクロソフト 一時使用コード...
-
エクセルの貼り付け「リンクさ...
-
Microsoft365で写真をアルバム...
-
会社のTeamsのことで相談です。...
-
officeビジネス型のワードやエ...
-
Microsoft Officeを2台目のPCに...
-
複数の写真を1枚に印刷
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【スプレドシート】IMPORTRANGE...
-
【スプレッドシート】指定の日...
-
英数字のみ全角から半角に変換
-
会社PCのメールが更新されない
-
マイクロソフト 一時使用コード...
-
Office 2021 Professional Plus...
-
エクセルで例えば、関数を使っ...
-
Microsoft Formsの「個人情報や...
-
1つのPCに「Excel 2010」「Exc...
-
エクセルで例えば、A1に㈱ベ...
-
理由を教えてください。
-
エクセルでXLOOKUP関数...
-
マイクロソフト オフィスについて
-
VLOOKUP関数について
-
teams設定教えて下さい。 ①ビデ...
-
Googleのスプレッドシートでシ...
-
【Excel VBA】PDFを作成して,...
-
Microsoft365で写真をアルバム...
-
Outlook で宛先が複数の場合の人数
-
Excel テーブル内の空白行の削除
おすすめ情報