
【質問したい事】
以下、コードの 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も見ています
-
【マクロ】エラー【#DIV/0!】が発生する場合の回避方法について
Excel(エクセル)
-
勤怠表について ABS、TEXT関数の使い方について教えて下さい
Excel(エクセル)
-
【関数】=EXACT(a1,b1) a1とb1が空白の場合trueではなく、空白を返すには?
Excel(エクセル)
-
-
4
【マクロ】【画像あり】4つのファイルデータを1つのエクセルブックにある4つのシートへそれぞれコピー
Excel(エクセル)
-
5
【マクロ】コードを少しでも、減らする為には
Excel(エクセル)
-
6
【マクロ】宣言は、何のためにするんですか???しなくても、普通に動いしまうのはなぜ?
Excel(エクセル)
-
7
エクセルの循環参照、?
Excel(エクセル)
-
8
【マクロ】WEBシステムから保存ではなく、開いたExcelデータを変数に入れる事が出来る?
Excel(エクセル)
-
9
【マクロ】変数に入れるコードを少しでも短くする為には?
Excel(エクセル)
-
10
【マクロ】【画像あり】関数が入っているセルを空白とみなさないように出来ますか?
Excel(エクセル)
-
11
【マクロ】【画像あり】❶ブックから別ブックへデータ貼付❷分岐 シート①にデータありシート②へ貼付の件
Excel(エクセル)
-
12
【マクロ】【画像あり】ファイル名を別名にて保存。元ファイルはゴミ箱へ移動⇒する方法について
Excel(エクセル)
-
13
【マクロ】【画像あり】4つのファイルデータを別ブックの4つのシートへそれぞれコピーしたい
Excel(エクセル)
-
14
【マクロ】参照渡しとモジュールレベル変数 どっちが よく使うものですか?
Excel(エクセル)
-
15
【マクロ】Call関数で呼び出した場合、共通の変数宣言は、省略できますか?
Excel(エクセル)
-
16
VBAの「To」という語句について
Visual Basic(VBA)
-
17
【マクロ】条件付き書式設定をマクロ化するには?
Excel(エクセル)
-
18
【マクロ、画像あり】A表かB表かどちらか判断をして、処理をする
Excel(エクセル)
-
19
findメソッドで、10:00:01 を検索をして、メッセージボックスにセル番地と時間が表示できない
Excel(エクセル)
-
20
条件付書式設定にて、本日の日付を条件として、2行分にセルに色を付けるには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
外車 色コード BMW 色コード オ...
-
草刈の際に電源ケーブルを切断...
-
Dir関数のDo Whileステートメン...
-
ギターのTAB譜の記号 N.C....
-
コード譜について
-
だいたいのスーパーでは天ぷら...
-
コード表記について
-
マイナーの裏コードは存在する?
-
ギターのコードで、「C9」と「C...
-
Jeff Beck「Red Boots」のコー...
-
メロディーからコードを導く
-
耳コピ
-
Dadd11というコードについて
-
輸入盤CDの見分け方
-
Gmailを開いた状態でもうひとつ...
-
onって何ですか?
-
流用の定義について
-
ギター最近始めました。 コード...
-
ビートルズ「イエスタディ」ギ...
-
無線局の種別コードについて教...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Dir関数のDo Whileステートメン...
-
Gmailを開いた状態でもうひとつ...
-
【マクロ】PasteSpecialメソッ...
-
ギターのTAB譜の記号 N.C....
-
VBA ダブルクリックするたびに...
-
外車 色コード BMW 色コード オ...
-
CODE関数から他の文字コードの...
-
だいたいのスーパーでは天ぷら...
-
草刈の際に電源ケーブルを切断...
-
【HULFT】 utllist とutladmin
-
マイナーの裏コードは存在する?
-
ドライアーのコードから煙が出...
-
Dadd11というコードについて
-
◎PPMのコードをお教えいただ...
-
この写真の状態(銅線剥き出し)...
-
流用の定義について
-
JISコードがわからない
-
キングクリムゾンの「スターレ...
-
ギターで2弦2フレットと3弦2フ...
-
DLookupがうまく出来ません
おすすめ情報