エクセルのVBAあまり知られていない使い方を幾つか紹介してみたいと思います。
第一弾は Dir関数
過去にも幾度か紹介しましたが、整理しておきます。
使い方 例1 ファイルの有無
変数=Dir(フォルダーへのパス \ ファイル名)
ファイルが存在すれば 変数には、ファイル名
なければ 空白になります。
使い方 例2 ファイル名の一覧
変数=Dir(フォルダーへのパス \ ファイル名) 最初に見つかったファイル名
変数=Dir() 次に見つかった ファイル名
変数=Dir() 次に見つかった ファイル名
・・・
全てのファイル名の検索が終了したら 空白
になります。
実例 Myピクチャーのフォルダ内にある写真(jpegファイル)のファイル名の一覧の作成
1、新規のエクセルファイルを作成、シート上に ボタンを配置
2、以下を借りつけて閉じる。
Sub ボタン1_Click()
Dim buf As String
buf = Dir(ThisWorkbook.Path & "\" & "*.jpg")
cnt = 5
Do While buf <> ""
Range("B" & cnt).Value = buf
buf = Dir()
cnt = cnt + 1
Loop
End Sub
cnt = 5
Do While buf <> ""
Range("B" & cnt).Value = buf
buf = Dir()
cnt = cnt + 1
Loop
End Sub
3、自身のパソコンのマイピクチャにで保存します。
保存する際には、マクロ有効(Xlsm)です。
ボタンをクリックして、A列5行目以下に、jpegファイルの一覧が表示されればOKです。
実例 その2、ファイル名と作成日(撮影日)の一覧
Dir関数では、ファイル名しか情報がありませんので
Windowsの機能で Scripting.FileSystemObject を使います。
Sub ボタン2_Click()
Dim buf As String
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
buf = Dir(ThisWorkbook.Path & "\" & "*.jpg")
cnt = 5
Do While buf <> ""
Range("A" & cnt).Value = buf
Range("B" & cnt).Value = FSO.GetFile(ThisWorkbook.Path & "\" & buf).DateCreated
buf = Dir()
cnt = cnt + 1
Loop
End Sub
Dim buf As String
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
buf = Dir(ThisWorkbook.Path & "\" & "*.jpg")
cnt = 5
Do While buf <> ""
Range("A" & cnt).Value = buf
Range("B" & cnt).Value = FSO.GetFile(ThisWorkbook.Path & "\" & buf).DateCreated
buf = Dir()
cnt = cnt + 1
Loop
End Sub
を実行したら、B列にファイルの作成日が表示されます。
GetFile(ThisWorkbook.Path & "\" & buf).DateCreated の
DateCreated が作成日です。
プロパティ | |
---|---|
Attributes | ファイルの属性を設定します |
DateCreated | ファイルが作成された日付と時刻を返します |
DateLastAccessed | ファイルが最後にアクセスされたときの日付と時刻を返します |
DateLastModified | ファイルが最後に更新されたときの日付と時刻を返します |
Drive | ファイルが存在するドライブの名前を返します |
Name | ファイルの名前を返します |
ParentFolder | ファイルが存在するフォルダを返します |
Path | ファイルのパスを返します |
ShortName | ファイルの8.3形式の名前を返します |
ShortPath | ファイルの8.3形式のパスを返します |
Size | ファイルのサイズを返します |
Type |
ファイルの種類を返します |
が取得できます。
このファイルは次の投稿でも使用しますので、保存しておいてください。