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)を開...
-
同じSQL文で極端に検索が遅くな...
-
DBファイルの中身を直接見れな...
-
htmlフォームから受け取ったフ...
-
PHPから中国語ファイルを読み込...
-
PL/SQLで@ファイル名が反応しま...
-
あるDBから別のDBのテーブルをs...
-
sql*loader 数値のロード
-
PL/SQLをWindowsのBATファイル...
-
数字で「そ」と「り」
-
複数行をINSERTで『ORA-00911: ...
-
SQLServerのselect文でデータ数...
-
ユーザにインフォメーション ス...
-
create databaseがうまくいきま...
-
BCPコマンドについて
-
【初心者】aws lightsail で自...
-
商品のデータをウェブサイトか...
-
作ったはずのDBがphpMyAdminで...
-
MySQL データベースをデタッチ
-
BAT処理でCSVデータのインポート
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データベースファイル(.db)を開...
-
同じSQL文で極端に検索が遅くな...
-
DBファイルの中身を直接見れな...
-
Access2010でアクセス制限をしたい
-
こんにちは。Access上でExcelデ...
-
accdbファイルの最適化
-
batでsqlplusによる前月データ...
-
badファイルの内容を知る方法
-
/var/lib/mysql以下に生成され...
-
sqlファイルを分割するソフトは...
-
rmanで別ホストへリストアする...
-
pdf ファイルを mysql に記録す...
-
mysqldumpでバックアップしたデ...
-
mysqlのcsvファイル出力について
-
DB2の文字化け
-
ダンプファイルから特定のテー...
-
FileStreamデータ型について
-
MYSQLのDBに大容量のCSVをUP...
-
パラメータファイルが壊れたと...
-
htmlフォームから受け取ったフ...
おすすめ情報