
【質問したい事】
以下、コードの fileName = Dir() の部分
当該コードはファイル名を2回目に呼びだすコードです
以下のとおり1回目と2回目の呼出し方法が違うのはなぜですか?
1回目の方はしっくりきます。
なぜとか、考えずにそいうものと覚えれば良いのでしょうか?
ご存じの方、ご指南宜しくお願いします
【参考ネットにあった解説↓】
Dir関数は1回目の呼び出しで指定されたファイルを取得しますが
2回目以降の呼び出しでは引数なしで実行する必要がある
【1回目】
fileName = Dir(folderPath & "\*.xls", vbDirectory)
【2回目以降】
fileName = Dir()
【コード説明】
ダウンロード場所フォルダにある、エクセルファイルの
名前を書きだす
コード実行後、シートに以下のとおり書き出される
a_20250529123939.xls
a_20250529123940.xls
a_20250529123941.xls
a_20250529123942.xls
※ダウンロード場所フォルダには上記4つのエクセルファイルがあります
【コード】動きます
Sub フォルダのファイル名取得()
Dim folderPath As String
Dim fileName As String
Dim i As Long
folderPath = "C:\Users\2020\OneDrive\マクロ\ツール\ダウンロード場所"
'1回目の呼び出し
fileName = Dir(folderPath & "\*.xls", vbDirectory)
i = 1
Do While fileName <> ""
Cells(i, 1).Value = fileName
'2回目の呼び出し。なぜ、1回目と呼出し方法が違うのは?
fileName = Dir()
i = i + 1
Loop
End Sub
No.2ベストアンサー
- 回答日時:
こんばんは
>2回目以降の呼び出しでは引数なしで実行する必要がある
説明が必ずしも正確ではありませんね。
Dir関数の引数は、
Dir (フォルダパス, ファイル属性 )
のような構成になっていますが、ワイルドカードを使って検索し、複数のファイルが該当する場合には、最初のものを返す仕様になっています。
(まとめて全部を返してはくれません:これは仕様です)
https://learn.microsoft.com/ja-jp/office/vba/lan …
では、2番目、3番目が欲しい場合は、どうするのか?
引数を省略して呼び出せば、同じ引数の2番目、3番目を順に返すようになっているということです。
ですので、異なる内容でファイルを検索するような場合は、毎回引数を指定して呼び出す必要があります。(=当然ですが)
例えば、処理に必要なファイルが、ちゃんと全て揃っているかを事前にチェックするような場合などが考えられます。
No.1
- 回答日時:
Dir関数の仕様による。
・便利そうだから、そんな風に関数設計しちゃった
・DOSのDirコマンドの挙動に近い風に
・dir実行した結果は複数ファイル名とかになるけど、配列とかで受け取るのは事前準備とか面倒だから
とかだと思う。
Microsoftサポート - Dir関数
https://support.microsoft.com/ja-jp/topic/dir-%E …
| Dir 関数を初めて呼び出すときに引数 pathname を指定しないと、エラーが発生します。 ファイル属性を指定する場合は、引数 pathname も指定する必要があります。
| Dir 関数は、引数 pathname と一致した最初のファイル名を返します。 引数 pathname と一致するファイル名をさらに取得するには、Dir 関数を引数なしで再度呼び出します。 一致するファイル名がなくなったら、Dir 関数は長さ 0 の文字列 ("") を返します。
2か所のディレクトリから1つずつ、逐次にファイル名取り出して比較処理とか、出来ないんよね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Dir関数のDo Whileステートメン...
-
CODE関数から他の文字コードの...
-
【マクロ】PasteSpecialメソッ...
-
ギターのTAB譜の記号 N.C....
-
◎PPMのコードをお教えいただ...
-
【HULFT】 utllist とutladmin
-
ギターコードを教えてください。
-
VBA ダブルクリックするたびに...
-
だいたいのスーパーでは天ぷら...
-
先日、電気コードに熱いお湯か...
-
ドライアーのコードから煙が出...
-
JISコードがわからない
-
輸入盤CDの見分け方
-
電気コードだけ買うことって可...
-
切断電源コードをつなぐ
-
電源コードの正式名称について
-
外車 色コード BMW 色コード オ...
-
ギターコード E7(+5)(+9)
-
ギターのタブ譜についてです。 ...
-
徹子の部屋のテーマ曲を演奏し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ギターのTAB譜の記号 N.C....
-
だいたいのスーパーでは天ぷら...
-
【マクロ】PasteSpecialメソッ...
-
Gmailを開いた状態でもうひとつ...
-
VBA ダブルクリックするたびに...
-
CODE関数から他の文字コードの...
-
【HULFT】 utllist とutladmin
-
ドライアーのコードから煙が出...
-
Dadd11というコードについて
-
マイナーの裏コードは存在する?
-
D7alt
-
DLookupがうまく出来ません
-
草刈の際に電源ケーブルを切断...
-
外車 色コード BMW 色コード オ...
-
Accessに対するGrep検索
-
コードを白く塗りたい
-
エクセルで定時に音を出す
-
Excel VBA Tabコードの出力
-
JISコードがわからない
-
実行時エラー3251対応処理方法
おすすめ情報