総合ファイルに、C:\testフォルダ配下にあるxlsxファイルを読み込んで書き出すという内容をしたいのです。各ファイルに書かれているA,B列の内容を、総合ファイルのA,B列に書き出す。という処理をしたいのです。ただ、条件があります。添付ファイルに状況を書いたものを添付させていただきます。
<条件>
E列に書き込んであるファイル名のファイルは、総合ファイルに書き込まずスキップする。
という内容でプログラムを書きたいのです。
現在、分かっている状態としては、
不明①:E列の対象外ファイルに書かれているファイルリストを配列に入れる方法が不明。
解決②:Dirを使い、対象ファイルをすべてとりだす。
不明③:1と2をwhileでの二重ループを行い、一致しなかったものは、【新規書込み対象配列】に【ファイル名】を代入。
解決④:ループ完了後、新規書込み対象配列から、該当ファイルを取り出し、書き込み処理をする。
という流れになるのかなと思っているのですが、【2重ループの書き方】、【対象外リストファイルと一致しなかったときの新規配列(=Writefile)】への代入方法がわからないのです。
■コード
With CreateObject("WScript.Shell")
.CurrentDirectory = "C:\test\"
End With
不明①
BaseStartrow = 4
BaseEndrow = Cells(Rows.Count, 5).End(xlUp).Row '最終行を取得
'配列への書込み方法がわからないfile1とfile3を対象外配列に書き込みたい。
【コード不明】
②対象フォルダ内のファイルを取り出す。
Filename = Dir("*.xlsx")
③①と②の配列から値を取り出し、一致したら書き出し対象配列(=配列名Writefileと一応します)に、ファイル名(中身)を代入する
Do While Filename <> ""
【コード不明】
loop
④
Do While Writefile <> ""
【コード解決済み】
loop
お分かりの方がおられましたら、ご教示お願いします。
後、説明のために、簡単にしているのですが、一度書き込んだファイルは、E列の末尾にファイル名を追記する。という処理をしているので最終的にリストは200位になる可能性があるので、ループ処理が軽い物だと助かります。
よろしくお願いします。
No.1
- 回答日時:
おはようございます。
一部になりますが、手書きなので、もしエラーになった場合はすみません
が、適宜修正をお願いします。
セル範囲を配列に入れる方法の例 myDatに2次元配列で入ります。
Dim myDat As Variant, I As Long, J As Long, myFlag As Boolen
myDat = Range(Range("E4"),Cells(Rows.Count, 5).End(xlUp)).Value
データが幾つかは、Uboundで取得が可能です。
きっと、配列名Writefileとの2重ループになるかと思いますが。
Writefileは、1次元配列でしょうか?
For J=Lbound(Writefile) to Ubound(Writefile)
myFlag=False
For I=1 to Ubound(myDat)
If myDat(I,1) = Writefile(J) Then
myFlag = True
End If
IF myFlag Then
’一致した場合の処理 書き出し?
End If
Next I
コードのご提示までいただきありがとうございました。参考にさせていただき、あれから試してみたところ、ひとまず自分で書いたもので、追記したファイル処理なしで動きました。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列数式の解除
-
2つ以上の変数を比較して最大数...
-
for each の現在の配列ポインタ...
-
subの配列引数をoptionalで使う...
-
VBA 1次元配列を2次元に追加する
-
特定のセル範囲で4文字以上入力...
-
AES暗号にて、AES_set_encrypt_...
-
Excel-VBAの配列「Public Const...
-
Delphi6で、実行後、一時停止を...
-
《エクセル2000》A列・B列の商...
-
配列変数の添字が範囲外ですと...
-
Excel VBA配列をFunctionに渡す
-
VBA 1つの列を3つ以上の条件で...
-
ListViewで、非表示列って作れ...
-
宣言文
-
FORTRANのCOMMON文
-
2次元動的配列の第一引数のみを...
-
Excel-VBAで内臓のMINVERSE,MM...
-
C言語を用いた3×3の平方行列と...
-
3次元配列の記述
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列数式の解除
-
2つ以上の変数を比較して最大数...
-
for each の現在の配列ポインタ...
-
VBA 1次元配列を2次元に追加する
-
特定のセル範囲で4文字以上入力...
-
配列変数の添字が範囲外ですと...
-
subの配列引数をoptionalで使う...
-
えfor文とか使っちゃう時点で時...
-
ListViewで、非表示列って作れ...
-
Excel-VBAの配列「Public Const...
-
VBAで近似曲線の係数取得
-
VB6 配列を初期化したい
-
VBのFunctionで、配列を引数...
-
エクセルで最小値から0を除く方法
-
Dim は何の略ですか?
-
《エクセル2000》A列・B列の商...
-
配列を任意の数値で埋める方法
-
友愛数を探すプログラム
-
verilogで配列の任意の8bitを取...
-
配列内の内容を全て表示する方法
おすすめ情報
課題ではなくて、ただ複数のファイルを1つにまとめるのを手動でやるのがしんどくなってきているので、自分で書いたコードです。配列化する必要ないのですか。ちょっと再度考えてみます。
そうなんですね.①から③消去できるんですね。ありがとうございます。
考えてきます。
[Open&Close の回数もどうなのかと気にはなりますが。]
これについては、開いてコピーして、総合ファイルにペーストし、ペースト後はファイルを閉じるという処理をしています。
ファイルを開かずにとりだす方法も考えてみることにします。
ありがとうございました。何とか求める形になりました。
たくさんの情報いただきありがとうございました。