Excel。マクロ24。シートごとのデータを1つのシートにまとめるのが面倒なので。
<Excel VBA>
シートごとにデータがありまして、そのデータを1つのシートにまとめたい場合、いちいち、シートごとに範囲選択をして、コピーして、
まとめたいシートに移動して貼り付けてという処理を繰り返すというのは、
面倒ですよね。
しかも、シートの枚数が多い場合は、ゾッとしますよね。
このような単調な作業。
しかも繰り返し処理ということならば、
Excel VBAの出番という感じですね。
では各シートを確認してみましょう。
新宿・渋谷・池袋の各シートを用意しております。
レコード件数は、多くても少なくてもOKなのですが、
1行目に見出し行があり、A列に社員番号・B列が氏名ということが、
各シートの共通のルールにしております。
場所が違うと、それぞれのシートごとに対応することになるので、
同じ処理とはいきませんので、注意が必要です。
そして、合体するシートが、全社員シートとなっています。
合体するシートを今回はデータのあるシートの前に置いておきます。
さて、Excel VBAを作っていくために事前に確認しておきたいことは、
全社員シートが2枚目にあるので、
3枚目から最後のシートまで繰り返し処理をする必要があること。
それぞれのシートのレコード数(見出し行を除いた行数)を
数える必要があること。
そして、合体させるシートの最終行にデータを追加していく必要があること。
この3つのことを念頭にして作ってみましょう。
Sub シート合体()
Dim i As Integer
Dim 社員数 As Long
Dim 合体数 As Long
合体数 = 2
For i = 3 To Worksheets.Count
社員数 = Worksheets(i).Range("a1").CurrentRegion.Rows.Count - 1
Worksheets(i).Range("a2").Resize(社員数, 2).Copy _
Worksheets("全社員").Range("a" & 合体数)
合体数 = 合体数 + 社員数
Next
End Sub
構文を確認していきましょう。
変数は、3つ用意します。
変数の合体数は、合体したレコード数をカウントするためのものです。
合体数 = 2
これは、見出しが1なので、2行目から貼り付けたいので2としています。
For i = 3 To Worksheets.Count
この構文ですが、i=3の3は、先頭のシートが3枚目だから3で、
Worksheets.Countは、シートの数を数えますので、
この数は、最終シートの数ですから、
この数値まで繰り返し処理を行わせることができます。
社員数 = Worksheets(i).Range("a1").CurrentRegion.Rows.Count - 1
シートのレコード数(社員数)を求めますが、
Worksheets(i).Range("a1").CurrentRegion.は、
ワークシートのA1からの表という意味ですね。
そしてその表の、Rows.Count – 1。
Rows.Countはその表の行数を数えます。
そして、見出し行を減らす必要があるので-1(マイナス1)します。
Worksheets(i).Range("a2").Resize(社員数, 2).Copy _
Worksheets("全社員").Range("a" & 合体数)
この行は、長いので『_』(アンダーバー)で接続させています。
この処理は、Worksheets(i).Range("a2")。コピー元のワークシートのA2から、
Resize(社員数, 2)。B列の社員数のセルまでを、範囲選択して、コピーして、Worksheets("全社員").Range("a" & 合体数)。
全社員シートの最終行に貼り付けをするという構文ですね。
合体数 = 合体数 + 社員数
次のシートのデータを全社員データの最終行に追加するために、
合体数に社員数をプラスしておきます。
では、実行してみましょう。
このように、1つのシートにデータだけを合体させることができましね。