[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『フォルダ名の取得』(momo)
マクロでフォルダ名を取得しようと思います
取得はフォルダ名だけ、フォルダの中にフォルダがある場合も
取得したいです
ボタンをクリック
↓
フォルダパス取得
↓
フォルダ名を選択
↓
Excelに一覧を作成
まだ途中です
ここからどうしていいかわからず教えてください
Sub パス_Click()
Dim FN As String
FName = GetDirectory(Range("B5").Value)
If FN <> "Cancel" Then
Range("B5").Value = FN
End If
End Sub
< 使用 Excel:Excel2019、使用 OS:Windows10 >
FileSystemObjectを使った再帰処理がよくつかわれます。 参考HPです。
http://blog.jmiri.net/?p=1763
(OK) 2020/06/16(火) 13:14
サンプルコードです。
Dim FSO As Object Dim cnt As Long
Sub test()
Dim oya As String cnt = 1 Set FSO = CreateObject("Scripting.FileSystemObject") oya = "C:\Users\hoge\Desktop\1111" ’フォルダパス ActiveSheet.Cells(cnt, 1).Value = FSO.getfolder(oya).Name ActiveSheet.Cells(cnt, 2).Value = oya Call subfolget(FSO.getfolder(oya)) Set FSO = Nothing End Sub
Function subfolget(ByVal objfol As Object)
Dim objsubfol As Object For Each objsubfol In objfol.subfolders cnt = cnt + 1 ActiveSheet.Cells(cnt, 1).Value = objsubfol.Name 'サブフォルダ名 ActiveSheet.Cells(cnt, 2).Value = objsubfol.Path 'サブフォルダパス Call subfolget(objsubfol) Next objsubfol End Function (OK) 2020/06/16(火) 13:29
まず、Excelの標準だと、Dir関数を使う事になりますが、サブフォルダを対象とすると、再帰呼び出しとか考えなくてはいけないので、難しいです。 外部オブジェクトを利用する方法が幾つかありますが、標準ではないので、初心者脱却してもらわないといけません。
とりあえず、外部オブジェクトを使い、コマンドプロンプトのDIRコマンドを利用する例なぞ。
意味を理解するのは難しいかも知れませんが、再帰処理を考えなくて済むので、ロジックは理解しやすいと思っています。
Sub test() Dim cPath As String Dim cFiles As Variant Dim i As Long
With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then cPath = .SelectedItems(1) Else Exit Sub End If End With
Cells.ClearContents
cFiles = Split(CreateObject("WScript.Shell").Exec("CMD /C DIR /A:D/B/S """ & cPath & """").StdOut().ReadAll(), vbNewLine) Cells(Cells(Rows.Count, "A").End(xlUp).Row + 1, "A").Resize(UBound(cFiles), 1).Value = WorksheetFunction.Transpose(cFiles) End Sub (???) 2020/06/16(火) 13:31
???さんのコードの中にすでに書かれてますが、フォルダを選択する方法です。
http://officetanaka.net/excel/vba/tips/tips39.htm
※私のコードは選択したフォルダではなく固定のフォルダになってますので、 フォルダ指定部分は適宜変更してください。 (OK) 2020/06/16(火) 14:13
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.