エクセルでファイル一覧を作成.№5(FileDialog)
エクセルでファイル一覧を作成します、
サブフォルダ以下も全て取得し、一覧表示します、
前回のプログラムでは、フォルダが無い場合のチェックや、最後に"\"を付けておく必要がありました。
これらを、プログラムに組み込みます。
If Right(Cells(4, 2), 1) = "\" Then
strDir = Cells(4,
2)
Else
strDir = Cells(4, 2) & "\"
End If
strBuf = Dir(strDir,
vbDirectory)
If strBuf = "" Then
MsgBox ("指定のフォルダは存在しません")
Exit
Sub
End If
これをモジュールの先頭に入れます。
Right(文字列, 数値)
文字列の右から、指定数値の文字数を取り出します。
つまり、最後が"\"でなければ、"\"を付加しています。
strBuf = Dir(strDir, vbDirectory)
これが空白の場合は、フォルダが存在しないので、
メッセージを出して、終了します。
次は、ボタンでフォルダ選択のダイアログを出すようにします。
上の、「フォルダ」のボタンです。
ボタンの追加方法は、
1.2003なら、「表示」→「ツールバー」→「コントロールツールボックス」→ボタンを選択する
2007以降なら、「開発」→「挿入」→「ActiveXコントロール」→ボタンを選択する
2.十字カーソルの状態で、シートの配置する場所をドラッグして配置
3.ボタンをクリックし、ツールバーの「プロパティ」
または、右クリックで「プロパティ」
4.「プロパティ」の「オブジェクト名」を、「btnフォルダ」と変更
5.「Caption」を、「フォルダ」に変更」
6.ボタンをダブルクリック、または、右クリックで、「コードの表示」
7.VBEが起動され、
Option Explicit
Private Sub btnフォルダ_Click()
End Sub
が自動的に作成されたはずです。
この、Subモジュールが、ボタンがクリックされた時に起動されるモジュールです。
この中に、処理を記述します。
Private Sub btn新規_Click()
With
Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True
Then
Cells(4, 2) = .SelectedItems(1)
End If
End With
End Sub
Application.FileDialog(msoFileDialogFolderPicker)
このようなダイアログです。
.Show
で実際に表示されます。
キャンセルされた場合は、Falseが返されますので、Trueの判定をしています。
.SelectedItems(1)
続いて、「実行」ボタンも作成します。
作成方法は、「フォルダ」ボタンと同様です。
「オブジェクト名」を、「btn実行」にして下さい。
Private Sub btn実行_Click()
Call ファイル一覧取得
End
Sub
以上で、ボタンの追加が完了です。
「フォルダ」ボタンでフォルダを指定し、「実行」ボタンで、ファイルの一覧が表示されます。
フォルダ選択のダイアログ
上記の方法以外にも、
Shellを使う方法や、APIを使う方法もありますが、ダイアログの形式が違います。
特別な理由がなければ、上記の標準のダイアログで良いはずです。
また、Application.FileDialog(msoFileDialogFolderPicker)
の引数により、ダイアログの種類が変わります。
msoFileDialogFilePicker:ユーザーがファイルを選択できます。
msoFileDialogFolderPicker:ユーザーがフォルダを選択できます。
msoFileDialogOpen:ユーザーがファイルを開くことができます。
msoFileDialogSaveAs:ユーザーがファイルを保存できます。
エクセルには非常に多くのダイアログがあります。
上記と同じ、「ファイルを開く」や「ファイルを保存」でも、
GetOpenFilename、GetSaveAsFilename
もあります。
それぞれ、使い方が微妙に違いますので、興味のある方は調べて見て下さい。
ここまで来て、何か忘れていますよね。
そうです、サブフォルダの中のファイルが取得出来ていないのです。
Dir関数では限界です。
まあ、いろいろ工夫すれば出来ない事もないのですが、かなり面倒な処理になってしまいます。
FileSystemObjectという便利なものがあるのです。
最低限の知識として、Dir関数は知っておく必要があるので、説明しましたが、
これから覚える人は、FileSystemObjectの使い方に慣れた方が良いでしょう。
そして、これを使えば、記述も単純化でき、フルパスの文字数も問題無くなります。
あっ、Dir関数のフルパスの文字数制限について説明していませんでしたね。
Dir関数は、フルパスの文字数が256Byteまでです。いや、そうらしいです。
私は、そんな長いパスになるようなフォルダ構成で、実際にテストしていないので・・・
FileSystemObjectでは、この制限はありません。
次回は、FileSystemObjectを使って、いままでのプログラムを書きなおしてみましょう。
同じテーマ「ファイル一覧を作成」の記事
エクセルでファイル一覧を作成.№1(概要)
エクセルでファイル一覧を作成.№2(Dir関数1)
エクセルでファイル一覧を作成.№3(Dir関数2)
エクセルでファイル一覧を作成.№4(FileLen,FileDateTime)
エクセルでファイル一覧を作成.№5(FileDialog)
エクセルでファイル一覧を作成.№6(FileSystemObject1)
エクセルでファイル一覧を作成.№7(FileSystemObject2)
エクセルでファイル一覧を作成.№8(インデント)
エクセルでファイル一覧を作成.№9(罫線)
エクセルでファイル一覧を作成.№10(完成)
新着記事NEW ・・・新着記事一覧を見る
PropertyのSetはLetでも良い|VBA技術解説(2021-03-31)
エクセル麻雀ミニゲーム|VBAサンプル集(2021-03-09)
VBA100本ノック 100本目:WEBから100本ノックのリストを取得|VBA練習問題(2021-03-03)
VBA100本ノック 魔球編:2桁の最小公倍数|VBA練習問題(2021-02-02)
Select Caseでの短絡評価(ショートサーキット)の使い方|VBA技術解説(2021-01-03)
VBA100本ノック 迷宮編:巡回セル問題|VBA練習問題(2020-12-31)
VBA100本ノック 魔球編:閉領域の塗り潰し|VBA練習問題(2020-12-16)
VBA100本ノック 魔球編:組み合わせ問題|VBA練習問題(2020-12-02)
将棋とプログラミングについて~そこには型がある~|エクセル雑感(2020-11-22)
VBA100本ノック 1本目:セルのコピー|VBA練習問題(2020-10-19)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.Excelショートカットキー一覧|Excelリファレンス
6.繰り返し処理(For Next)|VBA入門
7.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
8.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
9.セルに文字を入れるとは(Range,Value)|VBA入門
10.とにかく書いてみよう(Sub,End Sub)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBAサンプル集
- ファイル一覧を作成
- エクセルでファイル一覧を作成.№5(FileDialog)
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。