• ベストアンサー

ExcelのVBAでフォルダ名の取得

お世話になります。 タイトルのままなんですが、 VBAでフォルダのフルパスを取得したいのですが出来るでしょうか? ファイルのフルパスは FN = Application.GetOpenFilename で取得出来たのですが 同じ様に ダイアログから選択する様に出来るでしょうか?

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

  • ベストアンサー
  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.3

こんな使い方が正しいかどうか分かりませんし、ご希望のものとは少し違うかもしれませんが、参考までに…。 Sub Test2()   Dim FileName As Variant   FileName = Application.GetSaveAsFilename _     (InitialFileName _        :="フォルダを選択してください", _     FileFilter:="(*.---),*", _     Title:="フォルダの選択")   If FileName = False Then Exit Sub   MsgBox Mid(FileName, 1, _      InStrRev(FileName, "\") - 1) End Sub

Mr-J
質問者

お礼

回答ありがとうございました。 無事解決することができました。 また、疑問がありましたら よろしくお願いします。 

Mr-J
質問者

補足

なかなか いい感じに出来ました。 ありがとうございます。

その他の回答 (3)

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.4

>> VBAでフォルダのフルパスを取得したいのですが出来るでしょうか? > フォルダを選ぶと、そのフォルダの中のファイルを > 全部表示するようにしたいのです。 うぅ~ん どっちなんでしょうかね。 なんか趣旨が一貫していないような気がしますが・・・ ホルダだけ指定するのであれば、組込みのダイアログを使用するのは、 無理があると思います。 それであればフォルダ名を選択するフォームを作ったら如何でしょうか。 選択するホルダは、ある1個のホルダの中の複数のホルダということで いいのですか? 下記の例は、フォームにリストボックスとコマンドボタンを配置し、 そのリストボックスに表示されたフォルダの中から選択するように したものです。 例では、ユーザーフォームの名前を UserForm1、リストボックスの名前を ListBox1 とします。 "c:\test\"の中のホルダをリストボックスに表示し、選択したホルダの 中の標準ファイルだけをMsgBoxに表示します。 やりたいことがいまいち解りませんので、外れているかも知れませんが、 推測したところでは、こんな感じです。 Public MyPath As String Sub test2() Dim MyName As String MyPath = "c:\test\" MyName = Dir(MyPath, vbDirectory) UserForm1.Show (vbModeless) UserForm1.ListBox1.Clear Do While MyName <> ""   If MyName <> "." And MyName <> ".." Then     If (GetAttr(MyPath & MyName) And vbDirectory) = _       vbDirectory Then       With UserForm1.ListBox1         .AddItem MyName         .ListIndex = 0       End With     End If   End If   MyName = Dir Loop End Sub Private Sub CommandButton1_Click() Dim FName As String Dim Rw As Integer Dim FNdsp As String MyPath = MyPath & Me.ListBox1.Value & "\" FName = Dir(MyPath, vbNormal) Do While FName <> ""   If FName <> "." And FName <> ".." Then     If (GetAttr(MyPath & FName) And vbNormal) = _       vbNormal Then       Rw = Rw + 1 '      Cells(Rw, 1).Value = FName       FNdsp = FNdsp & MyPath & FName & vbCrLf     End If   End If   FName = Dir Loop UserForm1.Hide MsgBox FNdsp End Sub

Mr-J
質問者

お礼

回答ありがとうございました。 無事解決することができました。 また、疑問がありましたら よろしくお願いします。

Mr-J
質問者

補足

すみません、質問がごちゃごちゃしてしまいました。 今作ってるのが、フォルダ名をセルに入れてVBAを実行すると セルにファイルのリストを表示するものなので そのフォルダ名を簡単に取得出来ないものかと調べていました。

  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.2

こんなのはどうでしょう、他にもっと良い方法があるのかもしれませんが。 Sub Test()   Dim FileName As Variant   FileName = Application.GetOpenFilename _        ("JPEGファイル (*.jpg),*.jpg")   If FileName = False Then Exit Sub   MsgBox Mid(FileName, 1, _         InStrRev(FileName, "\") - 1) End Sub

Mr-J
質問者

補足

回答ありがとうございます。 このVBAと同じように、ファイルを選択してフォルダ名を取得するようにしてるのですが これを、直にフォルダを選ぶようにしたいのです。 よろしくお願いします。

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.1

一例ですが、下記のコードは、ファイル選択ダイアログからファイル(複数可)を 選択し、フルパスでファイル名をアクティブシートのA1から下へ書き込みます。 Sub test1()   Dim FName As Variant   Dim I As Integer   FName = Application.GetOpenFilename _     ("Excelファイル (*.xls), *.xls", , , , True)     For I = 1 To UBound(FName)       ActiveSheet.Cells(I, 1).Value = FName(I)     Next I End Sub こんなもので、どうにか参考になりませんか。

Mr-J
質問者

補足

回答ありがとうございます。 同じ様なのは、作れたのですが、 フォルダを選ぶと、そのフォルダの中のファイルを 全部表示するようにしたいのです。 わかりましたら、よろしくお願いします。