• ベストアンサー

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

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

  • Mr-J
  • お礼率76% (10/13)

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

  • ベストアンサー
  • 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
質問者

補足

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

関連するQ&A

  • フォルダ名だけを取得するVBA

    VBAを使ったエクセルテンプレート適用ツールを作成しているのですが そのVBAのことで教えてください。 現在自作のフォーム上にあるテキストボックスにフルパスが入っているとします(添付図参照)。 *この前提は必須と考えてください。 次に作成ボタンをクリックすると Step1 新しいブックが開かれ行幅や書式などが自動で調整されます。 Step2 ブックの保存ダイアログが自動で開きます。     ただし、保存ダイアログが開いた時点で自作フォーム中の     テキストボックスで指定したフルパスに移動しており、     且つ移動先のフォルダ名(<-注意!!フルパス名ではありません!!)と     同じ文字列をファイル名入力欄に自動で入力されるようにします。    ex) D:\MyProject\Project01\TaskA\にブックを作成し保存する場合、      保存ダイアログのファイル名欄にTaskAとだけ書く。 マクロ自体はここでストップし、これ以降はユーザーがそのファイルメモで 保存してよいかどうかを判断し、問題なければ手動でダイアログ上の「保存」ボタンを押します。 問題はStep2で、保存先のフォルダ名と同じ文字列を保存ダイアログのファイル名に記入するには どのようなコードを書いたらよいでしょうか。 私自身としては下記の二案を考えているのですがそれぞれについて疑問があるので教えてください。 案1 作成ボタンを押した時点でテキストボックスに書かれているフルパスの文字列から   末尾にあるフォルダ名だけを取得して変数に代入し、これを保存ダイアログの   ファイル名欄に反映させる。   疑問:テキストボックスのValue値に書かれているフルパスを示す文字列から      末尾のフォルダ名だけを取得するためのコードは何と書けばよいのでしょうか? 案2 ブックの保存ダイアログが開いて保存先のパスに移動してから今保存ダイアログで    開いているフォルダ名を取得する。    疑問:今アクティブになっているブックが保存されているフォルダ名だけを取得する    方法なら確かあったような気がしています。    しかし今保存ダイアログで表示されているフォルダ名を取得するコードは何と    書けばよいのでしょうか?    そもそもそういったコードや操作自体VBAにあるのでしょうか?

  • エクセルVBAで、図の挿入をして図のフルパスを取得したい

    Excel97, Windows98SEを使用しています。 写真パス = Application.GetOpenFilename ActiveSheet.Pictures.Insert(写真パス).Select で、図の入っているフルパスを取得して、挿入しているのですが、 これだと図のファイルを選択する際にプレビューが出てきません。 「図の挿入」ダイアログから図を挿入し、その図のフルパスを 取得できる方法がありましたら教えて下さい。 よろしくお願いいたします。

  • Excel VBA:ダイアログを使ってファイル名を取得したい

    ファイルを開く際に、GetOpenFilenameを使用し、以下のように記述しています。 Dim sFName As String Dim sPath As String sPath = ThisWorkbook.Path & "\データフォルダ" ChDir sPath sFName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", MultiSelect:=False) このとき、win98ですと、指定したフォルダが表示されますが、 win2000やXPですと、Excelのカレントフォルダが表示されます。 ダイアログ表示したときに、任意のフォルダを表示させるには、どのようにしたらよいですか? ご回答よろしくお願いします。

  • フォルダ内のフォルダ名を取得したい。

    VBAで Filename = Dir(Path, vbNormal)を使用すると、ファイル名が取得されます。(VBA一部掲載) フォルダ内の直下のフォルダ名のみ取得したいときはどうすれば、よいでしょうか。 宜しくお願いします。

  • VBAエクセル・・・フォルダ名を取得する

    VBA初心者です。 マクロで、ヘッダー部分にフォルダ名を入力したいのですが、 どのように取得すればよいでしょうか? ThisWorkbook.Path にすると、パスが出てきますが、 \C:\***\△△△\○○○\XXX.xls だとすると、「○○○」だけを入力したいのですが・・・ よろしくお願いいたします。

  • Excel 埋め込みオブジェクトのファイル名取得

    Excelファイルに挿入>オブジェクト>ファイルから ・・・ で選択し、埋め込んだオブジェクトのファイル名をVBAで 取得する事はできますか? 実際には上記のように手動ではなく、 Application.Dialogs(xlDialogInsertObject).Show , " ", , True でダイアログを表示し、ファイルを選択させています。 埋め込んだファイルがフォルダ階層が深かったりすると、 ファイル名まで表示されないので、ファイル名を取得して、 別のセルに入力するまでをVBAで処理をしたいと考えています。 既に埋め込まれているオブジェクトの名前を取得する、もしくは ダイアログで選択されたファイルの名前を取得する、ということが できるのであれば教えていただけますでしょうか?

  • エクセルでCSVファイルをユーザーに選択させたい

    エクセルVBAで、特定のフォルダ(C:\Data)に入っているCSVファイルをユーザーに選択させたいのです。 ただ、その際、選択肢に表示させるファイルに、例えば”企画“という文字列があることを条件にしたいのです。 組み込みダイアログであれば OpenFileName = Application.Dialogs(xlDialogOpen).Show("C:\Data\*企画*.csv") で大丈夫だと思います。 しかし、組み込みダイアログでは実際にそのファイルがエクセルで開かれてしまい、先頭の数字の0が消える等の不都合が起きてしまいます。 そのため、ファイルは指定させますが実際には開かずファイル名だけを取得する Application.GetOpenFilenameを使おうと思いました。 これでファイル名さえ所得できればあとは外部データの取り込みでCSVデータを取得できます。 ところが、 OpenFileName = Application.GetOpenFilename("C:\Data\*企画*.csv") はエラーになってしまいます。ネットで検索すると、Application.GetOpenFilenameではファイル名にワイルドカードは使えないようです。 このような場合、どのような方法をとればよいでしょうか?

  • エクセルVBAで複数のファイル名を取得したい

    WIN98SEでエクセル2000を使用しています。 ダイアログボックスを使って、選択したファイル(複数)のフルパスを取得したいのですがどうすればよいでしょうか?

  • VBAでファイルOPEN ダイアログを使用したいです

    現在、指定したファイルを開くVBAを書いているのですが、 ↓こんなの ----------------------------------------------------------- Dim vntFileName As Variant 'ファイルを開くダイアログを開きます vntFileName = _ Application.GetOpenFilename( _ FileFilter:="エクセルファイル(*.xls),*.xls" & _ ",CSVファイル(*.csv),*.csv" _ , FilterIndex:=1 _ , Title:="開けゴマ" _ , MultiSelect:=False _ ) 'ファイルが選択されているときは '選択したファイルをWorkbooks.Openメソッドで開きます If vntFileName <> False Then Workbooks.Open Filename:=vntFileName End If ---------------------------------------------------------------- あらかじめ開くディレクトリを、ネットワーク上のフォルダに指定したいのですが、どこにパスを書いたらいいのか、わかりません。 教えていただけますでしょうか。

  • EXCELで複数のファイルを同じブック内で開きたい

    久しぶりにVBAを使用してやらせたいことがありますので、質問です。 複数のCSVファイルがあり、これを同じブック内のシートとして開くことは 出来ますでしょうか。 メニューから開くとして、それぞれのファイルを開くと、別々のブックにて開いてしまいます。 これを同じブックで、シート別に開かせたいのですが、出来ますでしょうか。 さらに、これをVBAでやりたいと考えております。 まず考えたのは、 ”Application.GetOpenFilename”です。 ただし、これを利用すると、別々のブックでしか開くことができませんでした。 次に考えたのが、”QueryTables.Add”を利用することです。 これだと、同一ファイル、同一シート内にデータを取り込むことができるので、 問題ないのですが、ファイル名を指定しなければなりません。 ファイルが変わるたびにVBAでパスを修正するのは大変ですので、 ”QueryTables.Add”のデータ取り込みでファイル選択ダイアログが開くような コードがあればよいと考えております。 ファイル選択のダイアログが開いて、そのファイルのパスが取得できるような コードにすれば、”QueryTables.Add”にてデータの取り込みができそうなのですが、 どうすればよいか思いつきません。 "Dialogs(wdDialogFileFind)"というものも見つけたのですが、うまくいきませんでした。 何か良い方法がありますでしょうか。 よろしくお願いします。 Dialogs(wdDialogFileFind)

専門家に質問してみよう