.png)
今回は、1つの表から項目ごとにシートに分けるデータ分割処理をご紹介します。業務上では、フィルター抽出→抽出したデータを貼り付けという動作はよくあることです。今回も特に難しい処理ではありません。
ここで紹介するマクロの動作としては、手作業でやる時と同様な処理です。①まず新しいシートを用意し、②フィルター抽出で特定のデータを表示し、③表示されたデータをコピーして新しいシートに貼り付ける、と言った流れになります。
また、引き続き前回作成したマクロファイルに後付けして作っています。
▼過去記事:複数シートの内容を1シートにまとめる
.png)
【ExcelVBA】複数シートの内容を1シートにまとめる | ともゆきの独り言(雑記ブログ)
今回は、複数シートの内容を1シートにまとめる処理をご紹介します。さて、この「シートにまとめる」という文言が非常に厄介で、”まとめる”がどういう状態を指すのか、まずそこを突き詰めた方が良いかもしれません。
画面設計

- 設置場所別 出力ボタン:「MainProcess3」を指定
設置場所別 出力ボタンだけ追加しました。その他のボタンなどは前回のままですが、今回は使用しません。
入力データ

前回の複数CSVファイルを取り込んだ状態から始めます。
処理実行結果


設置場所別 出力ボタンを押すと、新たに設置場所ごとのシートが作成されます。
ソースコード(ExcelVBA)
Option Explicit Sub MainProcess3() Dim AllWS As Worksheet Set AllWS = Worksheets("集約") '新しいシートの作成 Dim ListWS As Worksheet Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "設置場所" Set ListWS = ActiveSheet '設置場所シートの重複削除と配列格納 Dim Arr As Variant ListWS.Range("A:A").Value = AllWS.Range("F:F").Value ListWS.Range("A:A").RemoveDuplicates Columns:=1, Header:=xlNo Arr = ListWS.Range("A2:A" & ListWS.Cells(ListWS.Rows.Count, "A").End(xlUp).Row) '設置場所別シート出力 Dim item As Variant For Each item In Arr Dim PlaceWS As Worksheet Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = item Set PlaceWS = ActiveSheet AllWS.Range("A1").AutoFilter Field:=6, Criteria1:=item AllWS.Range("A1").CurrentRegion.Copy PlaceWS.Range("A1") Next 'オートフィルターの解除 AllWS.Range("A1").AutoFilter End Sub
ポイント
- フィルターの抽出項目が設置場所なので、入力データである「集約」シートのF列(設置場所)を新しいシートにコピーし、重複削除で一意の項目を割り出します。タイトル行も含まれますので、Offsetで1行下げた範囲を一旦配列に格納します。後続の繰り返し処理で使用します。
- シート出力の繰り返し処理は、For Each~Nextループで、配列の要素を受ける変数「item」はVariant型です。新しいシートを用意し、フィルター抽出し、コピー&貼り付けです。コピー&貼り付けの際、セルA1のCurrentRegionで範囲指定していますが、非表示セルはコピーされずに貼り付けることができます(Excel上の仕様です)。より詳細な内容については下記をご参照ください。
▼オートフィルタを使い倒す
オートフィルタを使い倒す
undefined
▼絞り込んだ結果をコピーする
絞り込んだ結果をコピーする
undefined
コメントを投稿
別ページに移動します