
【質問したい事】
以下、コードの 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(エクセル)
-
【マクロ】【画像あり】4つのファイルデータを1つのエクセルブックにある4つのシートへそれぞれコピー
Excel(エクセル)
-
-
4
【マクロ】【画像あり】ファイル名を別名にて保存。元ファイルはゴミ箱へ移動⇒する方法について
Excel(エクセル)
-
5
【関数】=EXACT(a1,b1) a1とb1が空白の場合trueではなく、空白を返すには?
Excel(エクセル)
-
6
【マクロ】【画像あり】4つのファイルデータを別ブックの4つのシートへそれぞれコピーしたい
Excel(エクセル)
-
7
【マクロ】コードを少しでも、減らする為には
Excel(エクセル)
-
8
【マクロ】宣言は、何のためにするんですか???しなくても、普通に動いしまうのはなぜ?
Excel(エクセル)
-
9
エクセルの循環参照、?
Excel(エクセル)
-
10
【マクロ】WEBシステムから保存ではなく、開いたExcelデータを変数に入れる事が出来る?
Excel(エクセル)
-
11
【マクロ】変数に入れるコードを少しでも短くする為には?
Excel(エクセル)
-
12
【マクロ】【画像あり】関数が入っているセルを空白とみなさないように出来ますか?
Excel(エクセル)
-
13
エクセルに、105と入力すると、勝手に100で除算して1.05になってしまうのは何故でしょうか? ち
Excel(エクセル)
-
14
【マクロ】findメソッドで見つけたセルと他のセルの範囲指定のやり方について
Excel(エクセル)
-
15
【マクロ】A列にある、日付(本日:4月17日)を検索し、セルを選択するには?
Excel(エクセル)
-
16
【マクロ】Call関数で呼び出した場合、共通の変数宣言は、省略できますか?
Excel(エクセル)
-
17
【マクロ】アクティブセルの時間を別ブックから検索。見つかったセルを含めた最終行まで選択したい
Excel(エクセル)
-
18
【関数】不規則な文章から●●-●●●●-●●●●-●形式の数字を抜きだしたい
Excel(エクセル)
-
19
【マクロ】参照渡しとモジュールレベル変数 どっちが よく使うものですか?
Excel(エクセル)
-
20
VBAの「To」という語句について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Dir関数のDo Whileステートメン...
-
Gmailを開いた状態でもうひとつ...
-
ギターのTAB譜の記号 N.C....
-
【マクロ】PasteSpecialメソッ...
-
Dadd11というコードについて
-
DLookupがうまく出来ません
-
草刈の際に電源ケーブルを切断...
-
ドライアーのコードから煙が出...
-
excelマクロ フォームのインポート
-
ドライヤーのコードから発火
-
EXCELのハイパーリンク先の変更...
-
この写真の状態(銅線剥き出し)...
-
松山千春の『輝く時代』の弾き...
-
だいたいのスーパーでは天ぷら...
-
ギターのタブ譜についてです。 ...
-
群青日和のコードが??
-
【HULFT】 utllist とutladmin
-
VBA ダブルクリックするたびに...
-
ギターで2弦2フレットと3弦2フ...
-
教えて下さい。 P&G様のパンパ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ギターのTAB譜の記号 N.C....
-
だいたいのスーパーでは天ぷら...
-
【マクロ】PasteSpecialメソッ...
-
Gmailを開いた状態でもうひとつ...
-
VBA ダブルクリックするたびに...
-
CODE関数から他の文字コードの...
-
【HULFT】 utllist とutladmin
-
ドライアーのコードから煙が出...
-
Dadd11というコードについて
-
マイナーの裏コードは存在する?
-
D7alt
-
草刈の際に電源ケーブルを切断...
-
DLookupがうまく出来ません
-
外車 色コード BMW 色コード オ...
-
Accessに対するGrep検索
-
コードを白く塗りたい
-
エクセルで定時に音を出す
-
Excel VBA Tabコードの出力
-
JISコードがわからない
-
実行時エラー3251対応処理方法
おすすめ情報