プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。

現在多くのマクロで絶対パスを使っているのですが、相対パスを使いたいのですが書き方がよくわかりません。
絶対パスはShift+右クリックでとれるのですが、相対パスはマクロを使うようです。

具体的に¥ABC¥DEFG¥HI¥JKL¥MNOP¥QRS.xlmsのような場合
¥JKL以降を相対パスで記載するとどのようになるのでしょう?

質問者からの補足コメント

  • 早々のご回答ありがとうございます。
    昨夜寝る前に質問したのですが、夜中に質問内容に抜けがあることに気付いて朝一で補足しようとしたら既に4件もご回答いただいていて恐縮至極です。

    教えて頂きたかったのは
    現在絶対パスで
    ¥ABC¥DEFG¥HI¥JKL¥MNOP¥QRS.xlms
    のエクセルで使用しているマクロ中で保存したいフォルダの絶対パスは
    そのエクセルと同じフォルダ(¥ABC¥DEFG¥HI¥JKL¥MNOP)にある¥XYZ フォルダにシートのセルの値で自動保存するVBA中での相対パスの書き方です。

    相対パスに不慣れなためやはり分かりにくいですが、理解してもらえますでしょうか?
    言葉で書くと¥工場¥部¥課、の中にあるエクセル原紙のファイルを同じ(課の)フォルダ内の担当者のフォルダに保存する様にしたいのです。

    No.4の回答に寄せられた補足コメントです。 補足日時:2024/01/22 08:25
  • 早々のご回答ありがとうございます。
    質問が分かりにくくて済みません。

    親フォルダ(¥ABC)はネットワークドライブ(会社のサーバー)です。
    遠くない将来組織が変わると、このサーバー名が変わると思うので、今後はサーバーからの絶対パスではなく部署名からの相対パスでにしていこうと思っています。

    >いずれにしろ、カレントディレクトリを
    ¥ABC¥DEFG¥HI¥JKL¥MNOPに変えた後は・・・
    の意味が良く分かりません。

    ・前準備でカレントディレクトリーを変えることが必要で、
    カレントディレクトリーの変更は
    >WindowsのAPIか、WSH(Windows Scripting Host)を使います。
    と言うことならば当方には無理な気がします。

    もしそうなら一旦諦めて少しAPIかWSHを勉強してからの再質問?になりそうです。

    No.5の回答に寄せられた補足コメントです。 補足日時:2024/01/22 09:15
  • 早々のご回答でビックリの内容。
    すぐに試してみたら何と!動いたのですが、実に惜しいィー

    実際には保存フォルダはエクセルと同じフォルダ内ではなく、エクセルと同じフォルダ内のフォルダ(XYZ)なのです。
    実際のコードは
    Filename:="\\ABC\DEF\2.チーム\2.分析②T\☆検査結果&成績表\ABC19\リンク原紙\1.山本" & "\" & Range("E22") & " " & Range("A1") & " " & ".pdf

    と言うコードで、エクセルは「¥リンク原紙」フォルダに入っています。
    ご回答では原紙と同じフォルダ「¥リンク原紙」にPDFファイルが保存されました。
    (コード中の”¥”は試行錯誤で削除しました)

    このケースでも
    >Thisworkbook.Path &・・・
    が使えるのでしょうか?
    ならば非常にありがたい!!!

    No.6の回答に寄せられた補足コメントです。 補足日時:2024/01/22 09:45
  • 何度か試行したのですが、やはりエクセルと同じフォルダにしか保存できません。
    本当に何度も申し訳ないのですが何とかしたくお願いします。

    パスで指定したい"\XYZ”の保存フォルダと同じフォルダの中にエクセルが保存されているのです。
    フォルダAの中にエクセルと保存したい”XYZ”のフォルダが一緒に入っている状況です。
    つまりエクセルからしたら1つ下のフォルダになる感じ(でもないですか?)
    Thisworkbook.Path ではエクセルの保存されているフォルダになります。
    この後に"\XYZ”と追加しても同じことになります。

    最初の質問が悪くて状況が分かりにくかったのが混乱の原因だと思いますが、何とかお願いします。
    途中で枝分かれしていることになるのでしょうか????

    No.9の回答に寄せられた補足コメントです。 補足日時:2024/01/22 14:06
  • 色々試してみているのですが、

    ThisWorkbook.Pathがエクセルのフォルダでそのフォルダの中の「1.試験成績表」に保存したいのですが、
    ThisWorkbook.Path & "\1.試験成績表" & Range("E22") & " " & Range("A1") & " " & ".pdf"
    とすると1.試験成績表がファイル名になるのですが。

    ThisWorkbook.Path & "\..\1.試験成績表" & Range("E22") & " " & Range("A1") & " " & ".pdf"
    としたらエラーにはならないのですが保存ファイルが見つかりません。(少なくとも目的のフォルダには見当たらない)

    それ以外はエラーになってしまいます。

    フォルダの後に & 「ファイル名」があるので表記が少し違うのでしょうか?

      補足日時:2024/01/22 16:20

A 回答 (9件)

>私としてもNo6のような記述が出来ればベストだと思うのですが、同じフォ>ルダ内ではない場、エクセルのフォルダ内のフォルダも


>>Thisworkbook.Path &・・の変形で記述できるのでしょうか?
>あるいは、エクセルと同じフォルダの時のみ使える記述なのでしょうか?

一般論ですが
\abc\def\ghi\jkl\エクセル.xlsm があり、そのエクセル.xlsmのマクロを実行している前提になります。
\abc\def\ghi\jkl\XYZ ・・・①
とか
\abc\def\ghi\XYZ ・・・②
であれば、Thisworkbook.Path & "なんたらかんたら" の記述は使用可能です。
①は、保存先=Thisworkbook.Path & "\XYZ"
②は、保存先=Thisworkbook.Path & "\..\XYZ"
になります。
つまり、そのエクセル.xlsmを格納しているフォルダ(\abc\def\ghi\jkl)
と同系統のフォルダであれば、使用可能です。


\aaa\bbb とか c:\aaa とかの別系統、もしくは別ドライブでは、使用できません。
この回答への補足あり
    • good
    • 0
この回答へのお礼

本当に何度もありがとうございました。

パスの&の後にファイル名が付いていたのでこれとフォルダのパス\xxの区別をどうやってつけるのかが分かりませんでした。

上のフォルダには\..で簡単に上がれたのに、下のフォルダに\.とやると、これがフォルダ名に含まれてしまうことから混乱してしまいました。
最初はこれにも気づかなかったり・・・

ご丁寧なご指導で何とかなりました。
感謝!!!

お礼日時:2024/01/22 17:08

>エクセルは「¥リンク原紙」フォルダに入っています。


そのエクセルファイル内のマクロを実行していることが前提です。
Thisworkbook.Pathは、"\\ABC\DEF\2.チーム\2.分析②T\☆検査結果&成績表\ABC19\リンク原紙"になります。
よって
Filename:= Thisworkbook.Path & "\1.山本" & "\" & Range("E22") & " " & Range("A1") & " " & ".pdf

で目的の箇所に格納されませんでしょうか。
"\\ABC\DEF\2.チーム\2.分析②T\☆検査結果&成績表\ABC19\リンク原紙\1.山本"
のフォルダに格納されるはずです。
    • good
    • 0

No5です。


>>いずれにしろ、カレントディレクトリを
>¥ABC¥DEFG¥HI¥JKL¥MNOPに変えた後は・・・
>の意味が良く分かりません。

CドライブかDドライブかネットワークドライブのどのケースであっても、
まずは、カレントディレクトリを¥ABC¥DEFG¥HI¥JKL¥MNOPに変える必要があり、変えた後で、相対ディレクトリの指定が可能になるという意味です。


>・前準備でカレントディレクトリーを変えることが必要で、
>カレントディレクトリーの変更は
>>WindowsのAPIか、WSH(Windows Scripting Host)を使います。
>と言うことならば当方には無理な気がします。

http://officetanaka.net/other/extra/tips15.htm
に書かれていることを、そのまま実行すれば、よいのでそれほど難しいということではありません。(フォルダ名はあなたの環境にあわせて変える必要があります)

私としては、今回は、相対パスを使う必要はなく、No6の方法がベストかと思います。
    • good
    • 0
この回答へのお礼

何度もお手数をかけてしまい申し訳ありません。
補足とご回答が入れ違いになったようです。

私としてもNo6のような記述が出来ればベストだと思うのですが、同じフォルダ内ではない場、エクセルのフォルダ内のフォルダも
>Thisworkbook.Path &・・の変形で記述できるのでしょうか?

あるいは、エクセルと同じフォルダの時のみ使える記述なのでしょうか?

お礼日時:2024/01/22 10:00

No5です。

今回の場合、無理に相対パスを使用するメリットを感じられません。
¥ABC¥DEFG¥HI¥JKL¥MNOP¥XYZ にファイルを保存したい場合は、
保存先 = Thisworkbook.Path & "\XYZ"
として、その保存先を指定すれば良いです。
(¥ABC¥DEFG¥HI¥JKL¥MNOP¥QRS.xlmsをオープンして、QRS.xlms内のマクロを実行していることが前提です)
この回答への補足あり
    • good
    • 0

¥ABC¥DEFG¥HI¥JKL¥MNOP¥QRS.xlms


は、Cドライブ上にあるのでしょうか。
(C:¥ABC¥DEFG¥HI¥JKL¥MNOP¥QRS.xlms)
それとも、DドライブとかFドライブとか、ネットワークドライブとかにあるのでしょうか。
Cドライブの場合は、chdir関数で¥ABC¥DEFG¥HI¥JKL¥MNOPにカレントディレクトリを変えることが可能ですが、Cドライブ以外だとこの方法ではできません。
その場合は、windowsAPIもしくはWSH(Windows Scripting Host)を使用して、カレントディレクトリを変えます。
http://officetanaka.net/other/extra/tips15.htm

いずれにしろ、カレントディレクトリを
¥ABC¥DEFG¥HI¥JKL¥MNOPに変えた後は、
¥ABC¥DEFG¥HI¥JKL¥MNOP¥XYZを(絶対パス)
.\XYZ (相対パス)又は
XYZ (相対パス)
で指定可能です。
この回答への補足あり
    • good
    • 0

何もしないと、カレントディレクトリーは、


メニューから、ファイル>オプション>保存のダイアログの、「既定のローカルファイルの保存場所」の場所です。普通はドキュメントフォルダー。

なので、相対パス指定はその場所からの相対になるので、絶対パス指定より面倒です。

VBAの入ったxlsmファイルからの相対位置で指定したいと言うことなら、まずはそのxlsmファイルの場所を ThisWorkbook.Path で求めます。

案1:chdir ThisWorkbook.Path で、カレントディレクトリーをそこ(\ABC\DEFG\HI\JKL\MNOP)に変更して、ファイル名を相対パスで"..\file1.xlsx"と書くと、"\ABC\DEFG\HI\JKL\file1.xlsx"の事になります。

カレントディレクトリーの変更は最初に一度だけやっておけばいいです。
カレントディレクトリーを変更すると、ファイル保存などのダイアログの初期場所が変わります。

変形として、chdir thisworkbook.path & "\.." と1つ上に chdir すると、
ファイル名は "file1.xlsx" と書けます。

案2:ThisWorkbook.Path & "..\file1.xlsx" というファイルを開くと、"\ABC\DEFG\HI\JKL\file1.xlsx" が開かれます。ThisWorkbook.Path & "..\file1.xlsx" の全体としては絶対パス指定をしていることになります。

カレントディレクトリーをかえたくない場合は、こちらで。
この回答への補足あり
    • good
    • 0
この回答へのお礼

早々のご回答ありがとうございます。
昨夜寝る前に質問したのですが、夜中に質問内容に抜けがあることに気付いて朝一で補足しようとしたら既に4件もご回答いただいていて恐縮至極です。

教えて頂きたかったのは
現在絶対パスで
¥ABC¥DEFG¥HI¥JKL¥MNOP¥QRS.xlms
のエクセルで使用しているマクロ中で保存したいフォルダの絶対パスは
そのエクセルと同じフォルダ(¥ABC¥DEFG¥HI¥JKL¥MNOP)にある¥XYZ フォルダにシートのセルの値で自動保存するVBA中での相対パスの書き方です。

相対パスに不慣れなためやはり分かりにくいですが、理解してもらえますでしょうか?
言葉で書くと¥工場¥部¥課、の中にあるエクセル原紙のファイルを同じ(課の)フォルダ内の担当者のフォルダに保存する様にしたいのです。

お礼日時:2024/01/22 08:27

カレントディレクトリが、どこかによって回答が異なります。


まず、カレントディレクトリがどこなのかを決めて、そのディレクトリを提示してから、質問されると、正確な回答が返るかと思います。
    • good
    • 0
この回答へのお礼

早々のご回答ありがとうございます。
昨夜寝る前に質問したのですが、夜中に質問内容に抜けがあることに気付いて朝一で補足しようとしたら既に4件もご回答いただいていて恐縮至極です。

教えて頂きたかったのは
現在絶対パスで
¥ABC¥DEFG¥HI¥JKL¥MNOP¥QRS.xlms
のエクセルで使用しているマクロ中で保存したいフォルダの絶対パスは
そのエクセルと同じフォルダ(¥ABC¥DEFG¥HI¥JKL¥MNOP)にある¥XYZ フォルダにシートのセルの値で自動保存するVBA中での相対パスの書き方です。

相対パスに不慣れなためやはり分かりにくいですが、理解してもらえますでしょうか?
言葉で書くと¥工場¥部¥課、の中にあるエクセル原紙のファイルを同じ(課の)フォルダ内の担当者のフォルダに保存する様にしたいのです。

お礼日時:2024/01/22 08:26

こんばんは



ご質問の意味がよくわかりかねますが・・

カレントディレクトリが、「¥ABC¥DEFG¥HI」という前提で良いのでしょうか?
・・であるなら、相対パスは、
 JKL¥MNOP¥QRS.xlms
となりますが、妙なスペースがあちこちにあるので実際には機能しないと思います。
あくまでも、ご質問文の例示に対する意味合いとしての回答と解釈してください。
    • good
    • 0
この回答へのお礼

早々のご回答ありがとうございます。
昨夜寝る前に質問したのですが、夜中に質問内容に抜けがあることに気付いて朝一で補足しようとしたら既に4件もご回答いただいていて恐縮至極です。

教えて頂きたかったのは
現在絶対パスで
¥ABC¥DEFG¥HI¥JKL¥MNOP¥QRS.xlms
のエクセルで使用しているマクロ中で保存したいフォルダの絶対パスは
そのエクセルと同じフォルダ(¥ABC¥DEFG¥HI¥JKL¥MNOP)にある¥XYZ フォルダにシートのセルの値で自動保存するVBA中での相対パスの書き方です。

相対パスに不慣れなためやはり分かりにくいですが、理解してもらえますでしょうか?
言葉で書くと¥工場¥部¥課、の中にあるエクセル原紙のファイルを同じ(課の)フォルダ内の担当者のフォルダに保存する様にしたいのです。

お礼日時:2024/01/22 08:26

相対パスで「¥JKL」以降を記述する場合、通常は「..\..\¥JKL¥MNOP¥QRS.xlms」といった形になります。

ここで、「..\」は親ディレクトリを示し、各「¥」はフォルダの区切りを表しています。この例では、2つの親ディレクトリを上がってから、「¥JKL¥MNOP¥QRS.xlms」の場所にアクセスします。
    • good
    • 0
この回答へのお礼

早々のご回答ありがとうございます。
昨夜寝る前に質問したのですが、夜中に質問内容に抜けがあることに気付いて朝一で補足しようとしたら既に4件もご回答いただいていて恐縮至極です。

教えて頂きたかったのは
現在絶対パスで
¥ABC¥DEFG¥HI¥JKL¥MNOP¥QRS.xlms
のエクセルで使用しているマクロ中で保存したいフォルダの絶対パスは
そのエクセルと同じフォルダ(¥ABC¥DEFG¥HI¥JKL¥MNOP)にある¥XYZ フォルダにシートのセルの値で自動保存するVBA中での相対パスの書き方です。

相対パスに不慣れなためやはり分かりにくいですが、理解してもらえますでしょうか?
言葉で書くと¥工場¥部¥課、の中にあるエクセル原紙のファイルを同じ(課の)フォルダ内の担当者のフォルダに保存する様にしたいのです。

お礼日時:2024/01/22 08:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A