【Excel VBA】選択フォルダへの相対パス

このQ&Aのポイント
  • Excel VBAにてフォルダを選択し、フルパスを取得する方法についての質問です。
  • 質問1では「~.items.Item.Path」という構文についての意味を教えてほしいという内容です。
  • 質問2では、ブックのあるパスから見た、選択したフォルダへの相対パスを知る方法についての質問です。
回答を見る
  • ベストアンサー

【Excel VBA】選択フォルダへの相対パス

色々なサイトを参考に、Excel VBAにて以下の様なロジックを作りました。 -------------- Dim SHELL, MYPATH Dim TARGETDIR As String Set SHELL = CreateObject("Shell.Application") Set MYPATH = SHELL.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, ThisWorkbook.Path) If MYPATH Is Nothing Then End TARGETDIR = MYPATH.items.Item.Path Set SHELL = Nothing Set MYPATH = Nothing -------------- ブックのあるパス配下のフォルダを選択して、フルパスを"TARGETDIR"に格納します。 質問は2つです。 (1)"~.items.Item.Path"の構文の意味を教えて下さい。 (2)フルパスではなく"ブックのあるパスから見た、選択したフォルダへの相対パス"を知る方法を教えて下さい。 よろしくお願いします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

mypath Folderオブジェクト mypath.items 指定したFolderオブジェクトに含まれるFolderItemsコレクションを返すメソッド mypath.items.item 指定したFolderオブジェクトで指定したFolderオブジェクト .path フルパス #補足 mypath.items.itemはmypath.items.item(0)ではない >相対パス とりあえず今の文脈に継ぎ足すなら relpath = mid(mypath.items.item.path ,len(thisworkbook.path)+1, 999) のような具合ですね。

harahachi
質問者

お礼

なるほど!! MID関数ですか! 助かりました。 ありがとうございます。

関連するQ&A

  • フォルダ選択と取得したパスの表示

    どうしてもわからないのでご教授お願いします。 コマンドボタンを使用して、フォルダの選択のダイアログを表示し、選択したフォルダのパスを取得することはできたのですが、そこから取得したパスを任意のセルに表示させたいです。 どうすれば表示させることができるでしょうか。 Private Sub commandbutton1_Click() Dim Shell, myPath Set Shell = CreateObject("Shell.Application") Set myPath = Shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, "C:\") If Not myPath Is Nothing Then MsgBox myPath.Items.Item.Path Set Shell = Nothing Set myPath = Nothing End Sub ご教授宜しくお願いします。

  • エクセルVBAで指定フォルダ内の選択ファイル名の取得

    お世話になります。 エクセルVBA昨日から始めた初心者です。 いま、 Private Sub CommandButton1_Click() Dim Shell, myPath Set Shell = CreateObject("Shell.Application") Set myPath = Shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, "\\hk001a24\va\data\ツール") If Not myPath Is Nothing Then MsgBox myPath.Items.Item.Path Set Shell = Nothing Set myPath = Nothing End Sub というの作成したのですが、 これだとフォルダの選択しか出来ませんでした。 \\hk001a24\va\data\ツールの下にあるファイルを選択出来て、その選択したファイル名をVBA取得して保持できる ようにしたいのですが・・・ 急いでいるのでここで質問させて頂きました。 よろしくお願いします。

  • VBAでのフォルダ指定方法について

    EXCELファイルが保存されているディレクトリ配下のフォルダーを指定できるようにしたくていろいろ試してみたのですが、うまくいきません。 どなたか、お知恵をお貸しください。 以下ソースです。 Private Sub CommandButton1_Click() Dim ShellApp As Object Dim oFolder As Object Dim MyPath As String MyPath = ActiveWorkbook.Path Set ShellApp = CreateObject("Shell.Application") Set oFolder = ShellApp.BrowseForFolder(0, "処理ファイルの格納フォルダ選択", 1, MyPath) If Not oFolder Is Nothing Then TextBox1.Value = oFolder.Items.Item.Path End If Set ShellApp = Nothing Set oFolder = Nothing End Sub

  • VBAでフォルダの選択時のパスを指定するには?

    VBAでフォルダの選択する時に以下のマクロを使用しています。 これを実行するとデスクトップから表示されますが、任意のフォルダから表示させることはできないでしょうか? 用途としてはある特定のフォルダ配下に複数のフォルダがあり、これを選択させたいのです。 デスクトップからですと、そのフォルダまで辿り着くのが大変です。 また誤ったフォルダを選択する危険もあります。 このShell32を使うことにこだわってはいません。 他に良い方法があれば、それでも構いません。 よろしくお願い申し上げます。 Sub Macro1() MsgBox Folder_Define("フォルダを選択してください") End Sub Function Folder_Define(msg As String) As String Dim mySh As Shell32.Shell Dim myFolder As Shell32.Folder Set mySh = CreateObject("Shell.Application") Set myFolder = mySh.BrowseForFolder(0, msg, 0) If myFolder Is Nothing Then Folder_Define = "" Else Folder_Define = myFolder.Items.Item.Path End If Set myFolder = Nothing Set mySh = Nothing End Function

  • 「フォルダの参照」ダイアログを「常に手前」に表示

    下記サンプルを使ってフォルダを指定させています。 Sub Sample2() Dim Shell, myPath Set Shell = CreateObject("Shell.Application") Set myPath = Shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, "C:\") If Not myPath Is Nothing Then MsgBox myPath.Items.Item.Path Set Shell = Nothing Set myPath = Nothing End Sub 上記プログラムで働くダイアログを 常に手前に表示させるか、 モーダルにするか、 他の所がアクティブになっても、すぐに手前に表示させるかしたいのです。 ちなみにプログラムは http://officetanaka.net/excel/vba/tips/tips39.htm を参考にさせてもらっています。 (ちなみに「1.FileDialogオブジェクトを使う方法」はエクセル2002以降の機能らしく実行できませんでした。これを使えるのが一番いいのですが・・・) エクセル 2000を使っています よろしくおねがいします

  • エクセルVBA、フォルダ選択時のパスを指定するには?

    VBAでフォルダを選択する時に以下のマクロを使用しています。 これを実行するとデスクトップから表示されますが、任意のフォルダから表示させることはできないでしょうか? 用途としてはある特定のフォルダ配下に複数のフォルダがあり、これを選択させたいのです。 デスクトップからですと、そのフォルダまで辿り着くのが大変です。 また誤ったフォルダを選択する危険もあります。 このShell32を使うことにこだわってはいません。 他に良い方法があれば、それでも構いません。 よろしくお願い申し上げます。 Sub Macro1() MsgBox Folder_Define("フォルダを選択してください") End Sub Function Folder_Define(msg As String) As String Dim mySh As Shell32.Shell Dim myFolder As Shell32.Folder Set mySh = CreateObject("Shell.Application") Set myFolder = mySh.BrowseForFolder(0, msg, 0) If myFolder Is Nothing Then Folder_Define = "" Else Folder_Define = myFolder.Items.Item.Path End If Set myFolder = Nothing Set mySh = Nothing End Function

  • フォルダ選択でなくフルパスをセルの値から取得したい

    フォルダを選択して写真をシート上に表示するマクロを探すことができました。 LUは, http://programlife.jugem.jp/?eid=48 できれぱセルの値のフルパスを参照して写真を表示したいと思いいろいろ試して見ましたがうまくいきません。最後のフォルダを選択しなけれぱならないようです。 変更前 ' フォルダ選択画面を表示 Set shell = CreateObject("Shell.Application") Set myPath = shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, "C:¥") 変更後 "C:¥") ⇒ Sheets("データ").Cells(4, 1).Value   へ変更 フルパス = Sheets("データ").Cells(4, 1).Value = C:\Users\***\Desktop\写真 ' フォルダ選択画面を表示 Set shell = CreateObject("Shell.Application") Set myPath = shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, Sheets("データ").Cells(4, 1).Value ) どうかよろしくお願いします。

  • VBAでのフォルダ指定方法について 2回目

    フォルダー指定時に使用する「ShellApp.BrowseForFolder」について教えてください。 パス指定するところに直にフルパスを記述すると、そのフォルダを先頭として配下のフォルダが表示されます。 -イメージー 【業務】  【業務1】  【業務2】 しかし、変数にするとエラーは出ないのですが指定したパスを無視してデフォルトの表示となります。 -イメージー 【デスクトップ】  【マイドキュメント】  【マイコンピュータ】      : ファイルを置いて実行させるフォルダーが固定で無いので、ファイルを置いてあるフォルダ配下のみ表示させたいのですが無理なのでしょうか。 実行環境が97なのが影響してるのでしょうか。 どなたか、お助けください。 以下、今試しているソースです。 Dim ShellApp As Object Dim oFolder As Object Dim MyPath As String MyPath = ActiveWorkbook.Path ChDir MyPath 'MyPathの中身が「C:\Documents and Settings\ABC\My Documents\業務」であることを確認 MsgBox (MyPath) Set ShellApp = CreateObject("Shell.Application") '直にパス指定すると、業務を先頭にその配下のフォルダ指定となる Set oFolder = ShellApp.BrowseForFolder(0, "処理ファイルの格納フォルダ選択", 1, "C:\Documents and Settings\ABC\My Documents\業務") 'MyPathがきいてない。デスクトップを先頭にその配下のフォルダ指定となる Set oFolder = ShellApp.BrowseForFolder(0, "処理ファイルの格納フォルダ選択", 1, MyPath)

  • perlでdialogのフォルダ指定

    perl勉強中のものです。 perlにてプログラムを作成中ですが、フォルダを ダイアログを使って指定したいです。 参考ページを調べvbsにて以下のプログラムを作ってみました。 ****************************************************************** Set Shell = CreateObject("Shell.Application") Set objFolder = Shell.BrowseForFolder(0, "フォルダを選択してね!", 1, "c:\\") if objFolder is Nothing then Msgbox("ちゃんと選んで頂戴!") else Msgbox(objFolder.Items.Item.Path) end if ****************************************************************** 理解しきれていないのですが、vbsをperlに埋め込む?(変換?)ことができるようで モジュールを使って、上記のプログラムから参考を調べ、見よう見まねでperlで 作ってみましたが、何も表示せず、動作しません。 どこに問題があるか教えていただけないでしょうか? ****************************************************************** use Win32::OLE; my $Shell = Win32::OLE->CreateObject("WScript.Shell"); my $objFolder = $Shell->BrowseForFolder(0,'フォルダを選択してね', 1, 'c:\\' ); unless ($objFolder) { $Shell->MsgBox('ちゃんと選んで頂戴!',undef,'フォルダ選択',1); } else { $Shell->MsgBox("$objFolder->$Items->$Item->$Path"); } ******************************************************************* とんちんかんなプログラムを作っているかもしれませんが、 ご指導よろしくお願いします。

    • ベストアンサー
    • Perl
  • VBScriptでフォルダ参照ダイアログを表示したい

    HTMLファイルの中にVBScriptを記述しています。 内容はボタンが押されたら、フォルダ参照のダイアログ ボックスを表示したいのです。 開発環境は windows2000 IE6.02 スクリプトのところは以下のように記述しています。 Function Getfolder() Set Shell = CreateObject("Shell.Application") Set objFolder = Shell.BrowseForFolder(0, "フォルダを選択してね!", 1) if objFolder is Nothing then  Msgbox("フォルダを選択してください") else  Msgbox(objFolder.Items.Item.Path) end if End Function で、Set objFolder = Shell.BrowseForFolder(0, "フォルダを選択してね!", 1) のところで「書き込みできません」のエラーが表示されてしまいます。 どのようにすればフォルダ参照のダイアログボックスを表示できるのでしょうか?

専門家に質問してみよう