VBAのIE(InternetExplorer)制御で役立つ指定フォルダ内のファイル情報を配列格納する制御方法について解説しています。
前回の「指定フォルダ内のファイル一覧(ファイル名)を取得「fileName」」では、フォルダ内のファイル名取得の制御方法について解説しましたが、今回は、ファイル情報を配列へ格納する方法について、説明していきます。
こちらは、ファイル名だけでなくフォルダ名やファイルのフルパス名などを取得したい場合に非常に便利な機能ですので、是非使ってみてください。
Function fileNameF(Optional pathName As String = "myPath") As Variant()
If pathName = "myPath" Then: pathName = ActiveWorkbook.Path 'フォルダパス
'FileSystemObjectインスタンスを生成
Set objSFO = CreateObject("Scripting.FileSystemObject")
With objSFO.GetFolder(pathName & "\")
'要素数セット
Dim fileValue() As Variant
If .Files.Count > 0 Then
ReDim fileValue(.Files.Count - 1, 3)
Else
ReDim fileValue(.Files.Count, 3)
End If
i = 0
For Each objFile In .Files
fileValue(i, 0) = objFile.Name 'ファイル名
fileValue(i, 1) = pathName & "\" & objFile.Name 'ファイルフルパス名
fileValue(i, 2) = pathName 'フォルダパス名
fileValue(i, 3) = Mid(pathName, InStrRev(pathName, "\") + 1) 'フォルダ名
i = i + 1
Next
End With
Set objSFO = Nothing
fileNameF = fileValue()
End Function
※ドラッグ(スワイプ)すると全体を確認できます。
Sub sample()
Dim pathName As String
Dim fileData As Variant
pathName = ThisWorkbook.Path & "\file"
fileData = fileNameF(pathName)
r = 2
For i = 0 To UBound(fileData)
Cells(r, 1) = fileData(i, 0)
Cells(r, 2) = fileData(i, 1)
Cells(r, 3) = fileData(i, 2)
Cells(r, 4) = fileData(i, 3)
r = r + 1
Next
End Sub
※ドラッグ(スワイプ)すると全体を確認できます。
こちらの引数は以下の1つです。
引数名 | データ型 | 内容 | 値の事例 | 初期値 | 省略 |
---|---|---|---|---|---|
pathName | String | 取得するフォルダパス文字列 | "C:\Users\vba-ie\Desktop\vba-ie\file\" | ● |
引数は任意項目となります。
「pathName」には、ファイル名を抽出するフォルダのパスを入力します。
初期値は実行ファイルと同じフォルダ内のパスになります。
If pathName = "myPath" Then: pathName = ActiveWorkbook.Path 'フォルダパス
※ドラッグ(スワイプ)すると全体を確認できます。
こちらでは、パス名の初期値を設定しています。
引数を指定している場合は、そちらが利用されます。
Set objSFO = CreateObject("Scripting.FileSystemObject")
※ドラッグ(スワイプ)すると全体を確認できます。
フォルダを操作にするには、「FileSystemObjectオブジェクト」を利用します。
こちらではインスタンスを作成しています。
With objSFO.GetFolder(pathName & "\")
(省略)
End With
※ドラッグ(スワイプ)すると全体を確認できます。
こちらでは、「Withステートメント」を利用してコードの省略化を行っています。同じオブジェクトを何度も記述する場合に非常に便利ですので、是非活用しましょう。
'要素数セット
Dim fileValue() As Variant
If .Files.Count > 0 Then
ReDim fileValue(.Files.Count - 1, 3)
Else
ReDim fileValue(.Files.Count, 3)
End If
※ドラッグ(スワイプ)すると全体を確認できます。
こちらでは、配列の要素数を設定しています。
ファイル数は変動するため、一旦「Dimステートメント」で配列を宣言し、「ReDimステートメント」にファイル数の分だけ要素数に設定します。
ただし、こちらでは「Countプロパティ」で数を取得していますが、配列は0からですので、実際には1つ多く要素数が設定されてしまいます。
「正規表現で抽出したいデータを取得「regValue」」では、データ取得後に要素数を1減らす対応で行いましたが、こちらでは「IF~Thenステートメント」で対応していきます。
また、ファイル情報は複数あるので、多次元配列となっています。
i = 0
For Each objFile In .Files
fileValue(i, 0) = objFile.Name 'ファイル名
fileValue(i, 1) = pathName & "\" & objFile.Name 'ファイルフルパス名
fileValue(i, 2) = pathName 'フォルダパス名
fileValue(i, 3) = Mid(pathName, InStrRev(pathName, "\") + 1) 'フォルダ名
i = i + 1
Next
※ドラッグ(スワイプ)すると全体を確認できます。
こちらは、ファイル情報を各配列へ格納する処理となります。
配列は4次元配列で、それぞれに「ファイル名」「ファイルフルパス名」「フォルダパス名」「フォルダ名」が格納されます。
フォルダ名抽出名には「InStrRev」関数を利用して抽出しています。
抽出方法は「1階層上の親ディレクトリパスを取得「ParentDirName」」で解説していますので、こちらをご確認ください。
ここまでがサブルーチンの解説ですが、実際の使い方について見ていきましょう。
pathName = ThisWorkbook.Path & "\file"
fileData = fileNameF(pathName)
r = 2
For i = 0 To UBound(fileData)
Cells(r, 1) = fileData(i, 0)
Cells(r, 2) = fileData(i, 1)
Cells(r, 3) = fileData(i, 2)
Cells(r, 4) = fileData(i, 3)
r = r + 1
Next
※ドラッグ(スワイプ)すると全体を確認できます。
ざっと説明すると、まず取得するフォルダを指定しpathName変数に代入します。
こちらではフォルダの情報を取得するために「fileNameFサブルーチン」へ引数として渡し、fileData配列変数にファイル情報が格納されます。
後はどういう使い方をするかは自由ですが、こちらでは、A~D列にそれぞれの情報を入力しています。
このように配列データは自由に取り出しができますので、非常に便利ですね。
次の記事: VBAでIE操作に役立つ指定フォルダ内(サブフォルダ含む)のファイル情報を配列格納 >>
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
↑VBAのIE操作で分からない事があればこちらの掲示板よりご質問ください。
ExcelのVBA初心者入門↑こちらはVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります。
こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。
こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。
こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。
こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。
こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。
こちらでは、IE(InternetExplorer)制御の利用だけでなく、Excel全般で利用できるVBAコードです。エクセルVBAで役に立つものばかりですので、ご利用ください。