質問: 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 次のファイルへ 補足必要な場合はご指摘ください。
回答: ファイル名の候補をテーブルに持たない理由があるんですか? テーブルに持っておけば候補が多くなろうがコードの変更は不要ですよ。 私なら フォルダを再帰でたどる部分 → 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 とか。