プログラミングの際は出来るだけ検証機能を持たせるようにします。複数ファイルの結合の際は、表題の並びが結合するファイルで一致しているかを確認(検証)する様にプログラムを組んでいます。
「複数ファイルの結合_VBA.xlsm」または「ファイルを結合させるVBA.XLSM」の Module1 を見ながら読み進めて下さい。
ダウンロードリンク先 → hiro-yukioのサイト
このプログラムで行っている検証方法の概要をご説明致します。
次からプログラムの動きを記載しています。
1ファイル目を読み込みます。
表題をシートから配列変数「対象ブックの表題名_1」に代入します。
Module1の抜粋(上表の処理のプログラム)
'-------------------------------------------------
'表題名を配列に代入
For カウンター変数 = 1 To 対象ブックの最終列_1
対象ブックの表題名_1(カウンター変数) = .Cells(1, カウンター変数)
Next カウンター変数
表題を除く、データ部分を新ブックにコピーします。(詳細は省略)
表題部分を新ブックにコピーします。(詳細は省略)
表題を配列変数「対象ブックの表題名_1」の値を「対象ブックの表題名_2」に代入します。
Module1の抜粋(上表の処理のプログラム)
'-------------------------------------------------
'表題名、列数のチェック準備
For カウンター変数 = 1 To 対象ブックの最終列_1
対象ブックの表題名_2(カウンター変数) = _
対象ブックの表題名_1(カウンター変数)
Next カウンター変数
(1ファイル目の処理はこれでおわり)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
2ファイル目を読み込みます。
Module1の抜粋(上表の処理のプログラム)
'-------------------------------------------------
'前回の最終使用列および表題の並び順の確認(2つ目のファイル以降の処理)
(実際のプログラムはこの部分にも記述がありますが、省略しています)
For カウンター変数 = 1 To 対象ブックの最終列_1
If 対象ブックの表題名_2(カウンター変数) <> _
.Cells(1, カウンター変数) Then
'処理を中断へ
MsgBox "表題の並びまたは列名が前のファイルと 異なる為、処理を中断します。" & カウンター変数 & "列目"
Stop
Else
End If
Next カウンター変数
照合して一致していれば処理を続けます。一致していなければ、ここでプログラムは中断します。
(一致している場合の処理の続き)
表題をシートから配列変数「対象ブックの表題名_1」に代入します。
Module1の抜粋(上表の処理のプログラム)
'-------------------------------------------------
'表題名を配列に代入
For カウンター変数 = 1 To 対象ブックの最終列_1
対象ブックの表題名_1(カウンター変数) = .Cells(1, カウンター変数)
Next カウンター変数
表題を除く、データ部分を新ブックにコピーします。(詳細は省略)
表題を配列変数「対象ブックの表題名_1」の値を「対象ブックの表題名_2」に代入します。
Module1の抜粋(上表の処理のプログラム)
'-------------------------------------------------
'表題名、列数のチェック準備
For カウンター変数 = 1 To 対象ブックの最終列_1
対象ブックの表題名_2(カウンター変数) = 対象ブックの表題名_1(カウンター変数)
Next カウンター変数
3ファイル目以降の処理(2ファイル目の繰り返し)
(これ以降はファイルを全て読み込んだら終了)
余談ですが、プログラムは自動処理が便利なところですが、ファイル結合の場合は 表題列の順番や列数 がファイルごとに全て同じである保証はありません。例えば、国語、算数、理科の点数が入力されているシートがあるとして、あるシートだけ、国語、理科、算数と並んでいて、結合を行うとします。1番目のシートの表題が採用される為、2番目以降のシートの表題列の順番が違っていても、結合されたシートからはその間違いに気づくことは難しいでしょう。この記事を書くために改めてプログラムを読み返しましたが、繰り返し処理の中で何と無駄な部分が多くあると感じました。それは、このプログラムは当初、結合だけを目的として作成し、そのあとで、今回ご説明した 検証するためのプログラム を追加したためであるとこの記事を書きながら回想しておりました。どのようなプログラムでもプログラムで行わせた処理が正しいかどうかを検証するように、わたしはプログラミングするように心がけています。
次回は、処理が中断される処理の例、また、中断された際の後処理についてご説明します。お楽しみに。
読者の方へ。過去の記事をご覧になられていて、「画像」が上手く表示されない場合は、「hiro-yukioのサイト」の「過去のブログ記事」フォルダーにPDFで保存しましたのでこちらでご覧下さい。




