- ベストアンサー
Access2010 VBA での文字検索
Access2010のVBAにて "AAA.txt" "BBB.txt" "CCC.txt" "DDD.txt" "EEE.txt" といったファイル名の場合Trueを返すという関数を作成したいと思っています。 今思いついている方法としては 1.配列に格納してループで文字を検索 2.ifの条件で羅列して検索 3.Filter関数で妥協 3のFilter関数は「含まれる文字」という事で"AAA.t"の場合でもTrue扱いになってしまうので これはほぼ却下のつもりです。 おおよそこの自作関数が呼ばれる回数が30回ほどになります。 ですので出来るだけ処理速度早い方がいいので、1のループで検索はためらっています。 という事で2の方法をとろうかと思っています。 他に何かいい方法はありますでしょうか? ===大まかな処理の流れ=== ルートフォルダーのパス取得 ↓ ルートから再帰でサブをたどる ↓ サブ内にファイルがある場合上記5つのファイルか? ↓Yes 次の処理へ→処理後次のファイルへ ↓No 次のファイルへ 補足必要な場合はご指摘ください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ファイル名の候補をテーブルに持たない理由があるんですか? テーブルに持っておけば候補が多くなろうがコードの変更は不要ですよ。 私なら フォルダを再帰でたどる部分 → FileSystemObject を使う。 ファイル名候補一覧 → テーブルに格納する。 ファイル名候補とファイル名とのすり合わせ → パラメーター クエリーを作っておき、フォルダー内で見つけたファイルの名前が格納されているか判断する。 "fileName" というテキスト型のフィールドを持つテーブルを "fileNameMaster" という名前で作っておき、ファイル名候補を入れておく。 以下のようなパラメーター クエリーを作成し、"FindFile" という名前で保存しておく PARAMETERS [@FileName] Text ( 255 ); SELECT Count(fileNameMasuter.fileName) AS fileNameのカウント FROM fileNameMasuter WHERE (((fileNameMasuter.fileName)=[@FileName])); VBA にて以下のような関数を作っておき、再帰処理で見つけたファイル名を投げる。 ヒットすれば True が返り、なければ False が返る。 Function FindFile(aFileName As String) As Boolean Dim con As ADODB.Connection Set con = CurrentProject.Connection Dim proc As New ADODB.Command With proc .CommandText = "FindFilename" .CommandType = adCmdStoredProc .ActiveConnection = con End With Dim param As ADODB.Parameter Set param = proc.CreateParameter With param .Name = "[@FileName]" .Type = adVarWChar .Size = 255 .Value = aFileName End With proc.Parameters.Append param If proc.Execute.Fields(0).Value >= 1 Then FindFile = True Else FindFile = False End If End Function とか。
お礼
回答ありがとうございます。 ファイル名をテーブルに理由はありません。 ただ、あえて理由を付けるとしたら、「ファイル名の変更も無く、ファイル数も5つ」である(はず) という理由ぐらいです。 まぁ、「はず」ですのでお教え頂いた通りにするのがすっきりかな?と思ったのでその様にいたします。 ありがとうございました。