データの並び替え方法【エクセルマクロ・VBA】

スポンサーリンク

エクセルマクロを使ったの並び替え方法は、エクセル2007以降で使えるようになったSortオブジェクトを使う方法ととそれより前から使われていたrangeオブジェクトのSortメソッドを使う方法があります。

次のサンプルコード1はエクセル2003でも使用できるSortメソッドを利用したコードです。
見出し行がある場合で、見出し行を項目で並び替えするコードになっています。
項目で指定せず、Range(“A1”)のようにセルで並び替え項目を指定することもできます。
列の項目の順番を入れ替えたり追加する可能性がある場合やコードを見て並び替えの設定がわかるようにしたい場合は、直接項目名を指定することがおすすめです。

サンプルコード1

Sub srt()

On Error GoTo err ‘エラーが起きた場合は飛ぶ

Range(“A1″).Sort Key1:=”地区”, Key2:=”果物”, Header:=xlYes
‘セルA1を含む表を第1キー「地区」第2キー「果物」で見出しを除いて並び替え

Exit Sub ‘エラーがない場合はここで終了

err: ‘エラーになった場合は次のメッセージを表示
MsgBox “エラーが発生しました。” _
& vbCrLf & _
“並び替え項目が存在するか等について確認してください。”

End Sub

次のサンプルコード2はエクセル2007以降で使えるSortオブジェクトを使ったコードになります。
Sortメソッドの並び替えの同時利用項目は3つまでですが、Sortオブジェクトは4つ以上でもできます。
ただし、コードの量が増えてしまうので、初心者はSortメソッドがおすすめです。

サンプルコード2を書くにあたり苦戦した点がありました。
オブジェクト変数に代入する時はsetステートメントを使わないといけないのに、setを書かずに何度も「実行時エラー’91’:オブジェクト変数またはWithブロック変数が設定されていません。」とエラーになって解決するのに時間がかかりました。

並び替え項目はActiveSheet.Range(“A1”)のようにセルを直接指定した方が、コードの量は少なくてすみます。

サンプルコード2

Dim sh As Worksheet ‘ワークシート変数を宣言
Dim rng As Range ‘並び替え項目1を宣言
Dim rng2 As Range ‘並び替え項目2を宣言
Set sh = ActiveSheet ‘変数にアクティブシートをセット

On Error GoTo err ‘エラーが起きた場合は飛ぶ

Set rng = sh.Range(“1:1”).Find(“地区”) ‘変数に並び替え項目1をセット
Set rng2 = sh.Range(“1:1”).Find(“果物”) ‘変数に並び替え項目2をセット

With sh.Sort

With .SortFields
.Clear ‘並び替え設定をリセット
.Add Key:=rng ‘並び替え項目1を追加
.Add Key:=rng2 ‘並び替え項目2を追加
End With

.SetRange Range(“A1”).CurrentRegion ‘並び替え範囲を設定
.Header = xlYes ‘並び替えは見出しを除く
.Apply ‘並び替えを実行

End With

Exit Sub ‘エラーがない場合はここで終了

err: ‘エラーになった場合は次のメッセージを表示
MsgBox “エラーが発生しました。” _
& vbCrLf & _
“並び替え項目が存在するか等について確認してください。”

End Sub

コメント

タイトルとURLをコピーしました