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
とか。
回答ありがとうございます。
ファイル名をテーブルに理由はありません。
ただ、あえて理由を付けるとしたら、「ファイル名の変更も無く、ファイル数も5つ」である(はず)
という理由ぐらいです。
まぁ、「はず」ですのでお教え頂いた通りにするのがすっきりかな?と思ったのでその様にいたします。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Visual Basic(VBA) エクセルVBAでメールの自動作成の モジュールを作ったのですが、txtファイルから読み込んだ本文が文 2 2022/07/20 15:01
- Visual Basic(VBA) vbaサブフォルダーをワイルドカードで取得したい 2 2022/11/15 08:04
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データベースファイル(.db)を開...
-
Access2010でアクセス制限をしたい
-
DBファイルの中身を直接見れな...
-
同じSQL文で極端に検索が遅くな...
-
sql*loader 数値のロード
-
作ったはずのDBがphpMyAdminで...
-
mySQLのデータベースにhtmlのコ...
-
phpMyAdminをCentOS7にインスト...
-
CSVを1行しかインポートしない...
-
データベースに配列を格納する
-
複数インスタンス
-
phpMyAdmin、インポートで全角...
-
PL/SQLで@ファイル名が反応しま...
-
LinuxでFatal errorが出てしま...
-
TVTestのエラーの解決方法を教...
-
PL/SQLをWindowsのBATファイル...
-
comment on columnについてわか...
-
MySQLへの特殊文字の挿入について
-
どの程度のデータベースなら、c...
-
csvファイルを自動で取り込み(...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データベースファイル(.db)を開...
-
同じSQL文で極端に検索が遅くな...
-
DBファイルの中身を直接見れな...
-
ODBCを使用する場合のファイルD...
-
DB2の文字化け
-
batでsqlplusによる前月データ...
-
SQLデータベースへのリンクがあ...
-
Access2010でアクセス制限をしたい
-
ダンプファイルから特定のテー...
-
Notesの「notes.ini」内の環境...
-
SQLServer2005 セカンダリファ...
-
SQL*Loaderで桁数チェック
-
badファイルの内容を知る方法
-
accdbファイルの最適化
-
SQLServer2005のネットワークド...
-
SQLLDRの制御ファイルについて
-
SQLiteとファイルキャッシュで...
-
sqlファイルを分割するソフトは...
-
ファイルからのデータ更新について
-
MySQLって何ですか?
おすすめ情報