とある、フォルダのファイル名を書き出す記述を、とあるサイトを参考にしながら、
下記にて作成しましたが、
いつも、書き出すファイルが一つ不足してしまいます。
全てのファイルを書き出すためにどのように修正すればよいか、教えていただけないでしょうか。
よろしくお願いします。
Sub Sample()
Dim buf As String, n As Long
ReDim Files(0) ''動的配列を宣言します
buf = Dir("C:\test\*.xls")
Do While buf <> ""
n = UBound(Files) ''現在の大きさ(要素数)を調べます
ReDim Preserve Files(n + 1) ''動的配列の大きさを1つ増やします
Files(n + 1) = buf ''ファイル名を格納します
buf = Dir()
Loop
Range(Sheet1.Range("A1"), Sheet1.Range("A" & UBound(Files))).Value = WorksheetFunction.Transpose(Files())
End Sub
No.1ベストアンサー
- 回答日時:
>書き出すファイルが一つ不足してしまいます。
Range(Sheet1.Range("A1"), Sheet1.Range("A" & UBound(Files))).Value
↓
Range(Sheet1.Range("A1"), Sheet1.Range("A" & UBound(Files) + 1)).Value
配列は0スタートですから、一つ足りません。
ただ、書法そのものから言うと、私なら、以下のように書きます。
書き換えた理由はありますが、人の感性の問題で、レベルの低い議論に発展することがありますから、あえて説明は省いておきます。基本的なコンセプトは、コードの各行は短くするということです。
'//
Sub SampleR()
'No. 9010573
Dim buf As String, n As Long
Dim Files() As Variant
Const myPATH As String = "C:\test\*.xls"
buf = Dir(myPATH, vbNormal)
Do While buf <> ""
ReDim Preserve Files(n)
Files(n) = buf ''ファイル名を格納します
n = n + 1
buf = Dir()
Loop
With Worksheets("Sheet1")
'1度でもループを通れば、n のカウントは上がりますから、チェックに使えます。
If n > 0 Then
.Range("A1", .Cells(UBound(Files()) + 1, 1)).Value = Application.Transpose(Files())
End If
End With
End Sub
'///
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列数式の解除
-
えfor文とか使っちゃう時点で時...
-
for each の現在の配列ポインタ...
-
ビンゴ
-
FORTRANのCOMMON文
-
Excel-VBAの配列「Public Const...
-
VB2008: CSV を二次元配列に読...
-
2次元配列について、教えてくだ...
-
【excel VBA】 配列番地の検索
-
Array配列の末尾に追加したい。
-
20万を 超える、連番の 生成。
-
COBOL 2次元配列について
-
エクセルで最小値から0を除く方法
-
ListViewで、非表示列って作れ...
-
VBA Match関数の限界
-
サイコロを二つ振って出た数a,b...
-
UserForm1.Showでエラーになり...
-
特定のPCだけ動作しないVBAマク...
-
ACCESS VBAのSplit()関数の使用...
-
エクセルで特定の列が0表示の場...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列数式の解除
-
2つ以上の変数を比較して最大数...
-
VBA 1次元配列を2次元に追加する
-
特定のセル範囲で4文字以上入力...
-
subの配列引数をoptionalで使う...
-
ListViewで、非表示列って作れ...
-
for each の現在の配列ポインタ...
-
配列変数の添字が範囲外ですと...
-
VBのFunctionで、配列を引数...
-
VB6 配列を初期化したい
-
2次元動的配列の第一引数のみを...
-
Excel-VBAの配列「Public Const...
-
配列内の内容を全て表示する方法
-
Dim は何の略ですか?
-
配列を任意の数値で埋める方法
-
VLOOKUP関数で、一番下...
-
アルゴリズム、配列のフローチ...
-
えfor文とか使っちゃう時点で時...
-
verilogで配列の任意の8bitを取...
-
VBA Match関数の限界
おすすめ情報