• ベストアンサー

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 次のファイルへ 補足必要な場合はご指摘ください。

質問者が選んだベストアンサー

  • ベストアンサー
回答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 とか。

nobb_hero
質問者

お礼

回答ありがとうございます。 ファイル名をテーブルに理由はありません。 ただ、あえて理由を付けるとしたら、「ファイル名の変更も無く、ファイル数も5つ」である(はず) という理由ぐらいです。 まぁ、「はず」ですのでお教え頂いた通りにするのがすっきりかな?と思ったのでその様にいたします。 ありがとうございました。

関連するQ&A