VBAでフォルダ名を取得する方法【 取得したフォルダ名を一覧表で表示 】
こんな要望に応えるVBAを紹介します。
VBAを使ってまとめてフォルダ名を取得し、一覧表にすることでいろんな作業の効率化に応用することができます。
- フォルダの更新日時を取得し、使用頻度の少ないフォルダを把握する
- フォルダ名をまとめて変更する
- 使用頻度の少ないフォルダをまとめて削除する
私の職場ではフォルダ名を取得するVBAをサーバー内のファイルやフォルダの整理整頓をするVBAに応用して利用されています。下記の記事では、エクセルを使ってファイルやフォルダを整理整頓する方法について詳しく紹介しています。
サーバーにあるデータの整理整頓を効率よく行う方法に興味のある方は合わせてチェックしてみてください。
目次
VBAを使ってフォルダ名を取得するとはどうのような処理なのか?
フォルダ名を取得するVBAを応用することで作業効率アップに繋がるいろんなVBAに応用することができます。下記の動画ではフォルダ名を一覧表にするVBAと一覧表からフォルダ名を変更するVBAについて紹介しています。どちらのVBAにもフォルダ名を取得するVBAが使われています。
下記のサイトでは動画で紹介しているVBAが設定されたエクセルファイルをダウンロードしてお使い頂けます。これからサーバーにあるデータの整理整頓やフォルダの名前をまとめて編集した!という方におすすめです。
フォルダ名を一覧表にするVBA
フォルダ名を一覧表にするVBAの導入方法
① 「フォルダ名取得」シートの作成
下図のようにシートを作成します。
D2セルにはフォルダの場所を記入するので、背景色を白にし、D2セル以外は手入力する必要がないので背景色を黄色にしています。4行目以降のセルにはVBAによってフォルダ名やフォルダ作成日などの情報が自動的に記入されるので罫線を使ってわかりやすいように一覧表を表示しています。
② ボタンの作成
上図のように、「開発タブ」 → 「挿入」 → 「ボタン」からボタンを作成します。
VBAを頻繁に扱う場合、「ボタン」の作成は頻繁に発生します。下記の記事では、よく使うコマンドをトップ画面に登録する方法が紹介されています。「ボタン」コマンドをトップ画面に登録しておくことで、「ボタン」を簡単に作成することができます。これからVBAを積極的に導入していこうと考えている方におすすめです。
③ マクロの登録
上図のように、「右クリック」 → 「マクロの登録」 → 「フォルダ名取得」 → 「OK」という操作でボタンにマクロを登録します。マクロ名「データ更新日取得」や「データ名エクセル取得」などの選択肢があるのは、このエクセルファイルにいろんなVBAが設定されているからです。下記のサンプルVBA(フォルダ名を一覧表にするVBA)だけを標準Moduleに記載すると選択肢には1つしか出てきません。
サンプルVBA(フォルダ名を一覧表にするVBA)
1 | Sub フォルダ名取得() |
2 | Dim FP As String |
3 | FP = Cells(2, 4) |
4 | Dim fl As FileSystemObject |
5 | Set fl = New FileSystemObject |
6 | Dim Fld As Folder |
7 | Set Fld = fl.GetFolder(FP & “\") |
8 | Dim FlName As Folder |
9 | For Each FlName In Fld.SubFolders |
10 | gyo = Cells(Rows.Count, 1).End(xlUp).Row |
11 | Cells(gyo + 1, 1) = FlName.Name |
12 | Next |
13 | Set fl = Nothing |
14 | End Sub |
サンプルVBA(フォルダ情報を取得するVBA)
1 | Sub フォルダ名更新日取得() |
2 | Dim FP As String |
3 | FP = Cells(2, 4) |
4 | Dim fl As FileSystemObject |
5 | Set fl = New FileSystemObject |
6 | Dim Fld As Folder |
7 | Dim Pa As String |
8 | gyo = Cells(Rows.Count, 1).End(xlUp).Row |
9 | For i = 4 To gyo |
10 | Pa = Cells(i, 1) |
11 | Set Fld = fl.GetFolder(FP & “\" & Pa) |
12 | Cells(i, 2) = Fld.DateCreated |
13 | Cells(i, 3) = Fld.DateLastModified |
14 | Cells(i, 4) = Fld.DateLastAccessed |
15 | Next |
16 | End Sub |
フォルダ名を一覧表にするVBAの使い方
① 名前を取得したいフォルダの中身を確認
上図では、「フォルダやデータを操作するVBA」というフォルダに番号と国名が記載されたフォルダが保存されている!という状態です。
② D2セルに名前を取得したいフォルダの場所を入力
③ フォルダ名を一覧表にするVBAが登録されたボタンをクリック
たったこれだけの操作で、大量にあるフォルダの名前を取得することができます。
実行結果
VBAが設定されたボタンをクリックするだけで、大量のフォルダ名を一覧表にすることができました。一旦VBAを作ってしまえば、これからずっと使い続けることができ、時間と労力のかかる作業を一瞬で処理することができます。
さらに、フォルダ名の取得VBAを実行したあとに「フォルダ情報を取得するVBA」を使えば、フォルダ名からフォルダの情報を一覧表に表示することが可能です。
フォルダの更新日やアクセス日を一覧表にすることで、現在使われているか、使われていないのか!を一目で確認することができます。フォルダ名を取得するVBAとフォルダの情報を取得するVBAを組み合わせると、より使い勝手の良い便利なVBAになります。
フォルダ名をまとめて変更するVBA
フォルダ名をまとめて変更するVBAの導入方法
① 「フォルダ名変更」シートの作成
下図のようにシートを作成します。
D2セルにはフォルダの場所を記入するので、背景色を白。またC列の4行目以降は、「変更後のフォルダ名」を記入するので背景色を白、それ以外のセルの背景色は黄色にしています。手入力が必要なセルは色、それ以外は黄色という設定です。
② ボタンの作成
「開発タブ」 → 「挿入」 → 「ボタン」からボタンを作成します。あらかじめ「フォルダ名取得」ボタンと「フォルダ名変更」ボタンの2つのボタンを作成してください。
③ マクロの登録
フォルダ名をまとめて変更するVBAには2つのVBAが必要です。ボタンを2つ作成し、「フォルダ名を取得するVBA」と「フォルダ名を変更するVBA」を登録してください。
サンプルVBA(フォルダ名取得VBA)
1 | Sub フォルダ名取得() |
2 | Dim FP As String |
3 | FP = Cells(2, 4) |
4 | Dim fl As FileSystemObject |
5 | Set fl = New FileSystemObject |
6 | Dim Fld As Folder |
7 | Set Fld = fl.GetFolder(FP & “\") |
8 | Dim FlName As Folder |
9 | For Each FlName In Fld.SubFolders |
10 | gyo = Cells(Rows.Count, 1).End(xlUp).Row |
11 | Cells(gyo + 1, 1) = FlName.Name |
12 | Next |
13 | Set fl = Nothing |
14 | End Sub |
サンプルVBA(フォルダ名変更VBA)
1 | Sub フォルダ名変更() |
2 | gyo = Cells(Rows.Count, 1).End(xlUp).Row |
3 | Dim fl As FileSystemObject |
4 | Set fl = New FileSystemObject |
5 | Dim ff As Folder |
6 | Dim FP As String |
7 | FP = Cells(2, 4) |
8 | For i = 4 To gyo |
9 | FoName = FP & “\" & Cells(i, 1) |
10 | Set Flp = fl.GetFolder(FoName) |
11 | Flp.Name = Cells(i, 3) |
12 | Next |
13 | Set fl = Nothing |
14 | End Sub |
フォルダー名を変更するVBAの使い方
手順としては、「D2セルにフォルダ場所を記入」 → 「フォルダ名を取得するVBAを実行」 → 「C列に変更後のフォルダ名を記入」 → 「フォルダ名を変更するVBAを実行」です。
実行結果
上図では、国名の前に記載された番号を消去する!といった変更を行いました。フォルダ内名を確認してみると、一覧表で操作したフォルダの名前が変更されていました。このVBAは、フォルダの名前をまとめて変更したい!ときにとても便利です。
注意しなければいけないのが、フォルダ名を取得してからすぐにフォルダ名の変更を行うこと!です。名前の変更VBAを実行する前に誰かがフォルダの名前を変更した場合、名前を変更したいフォルダが存在しません!というエラーが発生してしまいます。名前の変更VBAは名前の取得VBAを実行してから速やかに実行するようにしましょう。
フォルダ名を取得するVBAを使ってサーバーの整理整頓を行う
大人数で共用のサーバーを使って仕事をしていると、サーバー内にいろんなファイルやフォルダが増えていきますよね。
- 2018年勤務表
- 2019年写真フォルダ
- 2020年スケジュール表
- 2020年伝票フォルダ
私の職場では、このようなフォルダが何百個とあります。転勤の多い仕事のため、赴任した職場で古いフォルダやファイルが重要なのか、削除していいのか判断できず、ずっと残り続けるという現象が起こってしまいます。
古いフォルダやファイルが何百個もあるサーバーの整理整頓をするときに活躍するのが、フォルダ名を取得するVBAです。
フォルダ名を取得するVBAの効果
- 煩雑しているフォルダの現状を1クリックで一覧表にすることができる
- 大量のフォルダ名を短時間で名前の変更をすることができる
- 最終更新日時を取得し、使用頻度の少ないフォルダを把握することができる
実際に私はこのフォルダ名を取得するVBAを職場に導入し、サーバー内の整理整頓作業を行いました。そのときに活躍したのが、上記で紹介しているフォルダの最終更新日時がわかる一覧表です。最終更新日時がわかると、このフォルダが必要か必要ではないか!の判断材料になり、職場全体に確認をとることができます。
下記の記事では、フォルダ名を取得するVBAを利用したサーバーにあるデータを整理整頓する方法について詳しく紹介しています。
気になる方は是非参考にしてみてください。
今回はフォルダ名を取得し操作する方法を紹介しましたが、関連記事で紹介している、VBAを使ってファイル名を取得する方法ではワードやエクセル、テキストファイルの名前を取得し一覧表にする方法を詳しく紹介しています。
下記のサイトでダウンロード可能なエクセルファイには、フォルダ名を取得するVBAとファイル名を取得するVBAの両方が設定されているので、併せてチェックしてみてください。
フォルダ名とファイル名の両方を取得することができれば、さらに作業効率をアップさせることができる高度なVBAを作成することができるようになります。
エクセルVBAを使って操作中のブック以外のものの操作ができるようになると、開いていないブックの操作をやってみたくなりますよね。関連記事で紹介している、「複数のエクセルファイルを1つのブックにめとめるVBA」と「複数のエクセルファイルを同時に操作するVBA」では開いていないブックの遠隔操作、処理の方法を詳しく紹介しています。
エクセルVBAを使って、機械的なエクセル業務の効率をアップさせたいと考えている方におすすめの内容になっています。是非チェックしてみてください。
ディスカッション
コメント一覧
まだ、コメントがありません