Worksheet_Activateイベント2 シート選択でデータをコピーしソートする

Worksheet_Activateイベント2

指定したシートを選択したら処理をするWorksheet_Activateイベント2
Worksheet_Activateイベント2

リンクユニット


イベントマクロ 19回

シート選択でデータをコピーしソートする

イベントは前回と同じWorksheet_Activateイベントですが、少しコードを変更したものを紹介します。
データが多かったりしたときに、同じシートではなく、別シートにコピーし、それをソートして、利用しやすくしたいと思います。
元のデータがそのままなので、加工したデータはさらに手を加えてもいいわけです。

データ範囲を並べ替える

データ範囲を並べ替えるには、その対象となるRangeオブジェクトに対し、SORTメソッドを使用します。 Sortメソッドの構文
 Sort (Key1, Order1, Key2, Type, Order2, Key3, Order3, Header, OrderCustom, MatchCase , Orientation , SortMethod, DataOption1, DataOption2 , DataOption3)

引数名 データ型 説明
Key1~3 Variant 並べ替えフィールドを範囲名 (文字列) またはRangeオブジェクトで指定
Order1~3 XlSortOrder Key1~3で指定した値の並び替え順序を指定
Header XlYesNoGuess 最初の行にヘッダー情報が含まれているかどうかを指定、xlNo は既定値
Sub 構文マクロ() 'A1をキー1にB1をキー2に、昇順で並べ替えます
	ActiveCell.Sort Key1:=Range("A1"), Order1:=xlAscending, _
    Key2:=Range("B1"), Order2:=xlAscending, Header:=xlYes
End Sub

イベントにCOPYとSORTを使う

1. 考え方は
Worksheet_Activateイベントに、特定のシートの範囲をコピーして、
指定シート(イベントを記述したシートオブジェクト)に張り付けたあと、
SORTメソッドで並べ替えるという手順になります。 サンプルは、購入した本のリストという設定です。


Worksheet_Activateイベント2-1
Private Sub Worksheet_Activate() 
	’処理したい内容をここに記述
End Sub

2. イベントの間に書くコードを考えましょう。
まず、Sheet1のCurrentRegionをコピーします。
Sheets("Sheet1").Range("B1").CurrentRegion.Copy
つづいて引数で、Sheet2のRange(”B1”)に張り付けると指定してやります。
Destination:=Sheets("Sheet2").Range("B1")


Worksheet_Activateイベント2-2
Private Sub Worksheet_Activate() 
	Sheets("Sheet1").Range("B1").CurrentRegion.Copy _
    	Destination:=Sheets("Sheet2").Range("B1")
End Sub

3. Sheet2にコピーしたデータが張り付けられました。
つづいてデータをSORTします。というのは、シリーズものの本をどこまで購入しているかチェックをしたいからです。
RangeオブジェクトのSORTメソッドを使います。
SORTメソッドでは、 はりつけたデータのある範囲を特定しなくても、単一のアクティブセルをひとつ指定すれば、対象範囲が自動的にそのアクティブセル領域に拡張されるという特徴があります。
ですからSORTメソッドを使うときの指定は、
Range("B1").CurrentRegionでもRange("B1")でも、結果は同じになります。


Worksheet_Activateイベント2-3
Private Sub Worksheet_Activate() 
	Sheets("Sheet1").Range("B1").CurrentRegion.Copy _
    	Destination:=Sheets("Sheet2").Range("B1")
	Range("B1").Sort Key1:=Range("D1"), Order1:=xlAscending, Header:=xlYes
End Sub

4. ただ張り付けたのでは、列幅が規定値のままですので、列幅を自動調整します。 Columns("B:D").EntireColumn.AutoFit


Worksheet_Activateイベント2-4

5. 次に使うことを考えて、シート上のデータをクリアするコードを加えます。
データをソートしたいときに、シートを選択すると、データがコピーされて、
選択したシートにソートされたデータが表示されるというマクロの完成となります。

Private Sub Worksheet_Activate()
    Range("B1").CurrentRegion.Clear
    Sheets("Sheet1").Range("B1").CurrentRegion.Copy _
        Destination:=Sheets("Sheet2").Range("B1")
    Columns("B:D").EntireColumn.AutoFit
    Range("B1").Sort Key1:=Range("D1"), Order1:=xlAscending, Header:=xlYes
End Sub

今回のイベントマクロは、わざわざイベントを使わなくても、通常のマクロとして使えばいいのではないかという、内容のコードです。
しかしイベントにすることで、ボタンやマクロのショートカットキーなどを作成する手間がないという便利さがあります。