- 締切済み
最下層のファイル名称取得
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- ken-nosuke
- ベストアンサー率36% (56/154)
No1.No4です。Excelで作ってみました 1.下記をモジュール1の書き込み 2.シート1の名前を「ファイルリスト」とします 3.シート2の名称を「作業シート」とします 4.シート1のセルB1に検索したいファオルダを記入します 例「C:\121ware」 5.micro1 を実行します Public 行N, F As Integer Sub micro1() 'シート初期化 Sheets("ファイルリスト").Activate A = Cells(1, 1) B = Cells(1, 2) Cells.Select Selection.ClearContents Cells(1, 1) = A Cells(1, 2) = B Sheets("作業シート").Select Cells.Select Selection.ClearContents F = 1: '階層 行N = 1: '出力行 フォルダ元 = Sheets("ファイルリスト").Cells(1, 2) Call micro2(フォルダ元) Sheets("ファイルリスト").Activate Sheets("ファイルリスト").Cells(1, 1).Select End Sub Sub micro2(フォルダA) N1 = 0 フォルダ元 = フォルダA フォルダ名 = Dir(フォルダ元 + "\", vbDirectory) f1: If フォルダ名 = "." Or フォルダ名 = ".." Then GoTo f2 End If If フォルダ名 = "" Then GoTo f3 N1 = N1 + 1 フォルダB = フォルダA + "\" + フォルダ名 Sheets("作業シート").Cells(N1, F) = フォルダB f2: フォルダ名 = Dir GoTo f1 f3: Call macro3(F, 行N) End Sub Sub macro3(F, 行N) i = 1 f1: フォルダA = Sheets("作業シート").Cells(i, F) If フォルダA = "" Then Sheets("作業シート").Columns(F).Select Selection.ClearContents Exit Sub End If 属性 = GetAttr(フォルダA) If 属性 >= 16 And 属性 < 32 Then F = F + 1 Call micro2(フォルダA) F = F - 1 Else 行N = 行N + 1 Sheets("ファイルリスト").Cells(行N, 1) = フォルダA End If i = i + 1 GoTo f1 End Sub
- ken-nosuke
- ベストアンサー率36% (56/154)
No.1です。「VBAで可能か」を失念しており失礼しました。 VBAで作成するなら、下記の関数を使うとできます。 Dir 関数(https://akira55.com/dir/) 指定したフォルダ内に有るフォルダおよびファイル名を取得します。 GetAttr 関数(https://www.239-programing.com/excel-vba/func/func072.html) 指定したフォルダまたファイルの属性を調べます。属性がフォルダの場合さらにその下にファイルがあるのでDirで繰り返し検索します。 Doループなどで繰り返せば最下位のファイル名まで取得可能です。
- kteds
- ベストアンサー率42% (1882/4440)
「黄色のイメージで取得したい」とは 「フルPATHで取得したい」ということでしょうか。 そうであれば、Powershell の resolve-path で可能です。 例えば、コントロールパネルのファイル名を取得する場合は resolve-path C:\windows\system32\*.cpl のように指定すれば下記のようにフルPATHを取得出来ます。 C:\windows\system32\appwiz.cpl C:\windows\system32\bthprops.cpl C:\windows\system32\desk.cpl C:\windows\system32\Firewall.cpl C:\windows\system32\hdwwiz.cpl C:\windows\system32\inetcpl.cpl C:\windows\system32\intl.cpl C:\windows\system32\irprops.cpl C:\windows\system32\joy.cpl C:\windows\system32\main.cpl C:\windows\system32\mmsys.cpl C:\windows\system32\ncpa.cpl C:\windows\system32\powercfg.cpl C:\windows\system32\RTSnMg64.cpl C:\windows\system32\sysdm.cpl C:\windows\system32\TabletPC.cpl C:\windows\system32\telephon.cpl C:\windows\system32\timedate.cpl C:\windows\system32\wscui.cpl ドライブやフォルダ名は自分の環境に合わせて試してみてください。
- NuboChan
- ベストアンサー率47% (790/1658)
質問に興味がありましたのでおせっかいながら 少し以下の疑問点が ? やりたいことは、最上位(1階層)のフォルダー名を指定して それ以下の多層フォルダー(2,3,----、XX階層)に含まれる 全てのフォルダー名とファイルのフルパスを書き出す求める事だと思いますが ? 例では、 2階層フォルダーまでが挙げられていますが、 当然それより深い階層フォルダー(3、4,----階層)があることがあるし それぞれの階層にはフォルダー以外にファイルがあることもある ? *例では、3階層とありますが、 2階層に含まれるファイル名であって構造的には3階層とは言わないと言わないと思います。 ------------------------ それとも 例のように2階層までの構造で3階層と増えることは無いのでしょうか ?
- ken-nosuke
- ベストアンサー率36% (56/154)
もっとも簡単な方法 1.A,B欄とも空欄を作らない。 A3~A6まで全て「受注」を記入。オートフィルを使えばコピーは簡単 B5に「2020-003」を記入 2.D2欄に下記数式を入れる ="\"&A2&"\"&B2&"\"&C2 3.D2欄をコピーしD3~D6に貼り付け
お礼
ありがとうございます。フルパス名でなくてもファイルの名称がわかればいいのですが、それならもっと簡単な方法あるでしょか