« コピーしてコピーしたセルを挿入する | トップページ | VBAでファイルを削除する »

2010年3月 5日 (金)

ワイルドカードで検索してファイル名を取得

VBAでファイルを検索するときは
FileSearchオブジェクトを使います。

下のコードは
マイドキュメントのフォルダ内の拡張子.xls
つまりExcelのファイルを検索して
検索結果をシートに書き出します。

変数MyPathの文字列内の
「あなたのユーザー名」のところを適宜変更してください。

ファイルの検索にワイルドカード(*)を使います。

.Filename = "*.xls"

の"*.xls"の箇所の拡張子を換えれば
その拡張子が検索できます。
また、
MyPathを検索したいフォルダへのパスに変更すれば
そのフォルダを検索できます。

このコードでは、For文のなかで
検索結果のファイル名を
シートに書き出す操作をしています。

ここを変更すれば検索結果のファイルに対して
いろいろな操作ができます。

ワイルドカードで検索してファイル名を取得するコード:

Sub macro100304a()
'ファイル名を取得
'ワイルドカードで検索
    Sheets.Add
    Dim MyPath, MyFile As String
    Dim i As Integer
    'マイドキュメント内を検索
    MyPath = "C:\Documents and Settings\" & _
        "あなたのユーザー名\My Documents\"
        'ファイルの有無を確認
        With Application.FileSearch
            'MyPathで指定したフォルダ内を検索する
            .LookIn = MyPath
            '拡張子xlsのファイルを検索
            .Filename = "*.xls"
            If .Execute() > 0 Then
                Cells(1, 1) = .FoundFiles.count & _
                    " 個のファイルが見つかりました。"
                For i = 1 To .FoundFiles.count
                    '見つかったファイルに対する操作
                    'ここでは、パスをセルに入れる
                    Cells(i + 1, 1) = .FoundFiles(i)
                 Next i
            Else
                Cells(1, 1) = "検索条件を満たすファイルはありません。"
            End If
        End With
End Sub

実行後のシートの具体例
Vba20100304a

1行目にファイルの数、2行目以降ファイル名が続きます。
ファイル名といってもフルパスです。
ファイル名だけにするには、
MyPathで指定したフォルダの部分以降を取得します。

それには、Right関数とLen関数を使います。
それぞれの関数の説明はVBAヘルプにあります。

使い方は具体例を挙げます。

Right("やむえむのExcel VBAメモ", 5)

は、右から5文字の「VBAメモ」を返します。

Len("やむえむのExcel VBAメモ")

は、文字列の文字数の16を返します。

これを使ってフォルダの部分以降のファイル名を取得するには、
上記コードの「Cells(i + 1, 1) = .FoundFiles(i)」の部分の右辺を

Right(.FoundFiles(i), Len(.FoundFiles(i)) - Len(MyPath))

に変更します。

|

« コピーしてコピーしたセルを挿入する | トップページ | VBAでファイルを削除する »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: ワイルドカードで検索してファイル名を取得:

« コピーしてコピーしたセルを挿入する | トップページ | VBAでファイルを削除する »