Excel VBAで表の並び替えを正しく行う方法|タイトル行を維持する方法

Office系ソフトウェア

Excel VBAを使って表のデータを並び替える際、タイトル行まで並び替えられてしまう問題に直面することがあります。本記事では、タイトル行を維持しつつ、M列の色順、A列降順、B列降順で並び替える正しい方法を解説します。

タイトル行を維持しつつ並び替えを行うポイント

並び替えを適切に行うためには、以下のポイントを押さえる必要があります。

  • タイトル行(1行目)を範囲から除外する
  • ソート範囲を正しく設定する
  • VBAのSortメソッドを適切に使用する

修正後のVBAコード

以下のVBAコードを使用することで、タイトル行を保持しつつ正しく並び替えができます。

Sub 並び替え()
    Dim ws As Worksheet
    Dim rng As Range
    Set ws = ActiveSheet
    
    ' データ範囲の設定(2行目以降)
    Set rng = ws.Range("A2").CurrentRegion
    Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1) ' 1行目(タイトル)を除外
    
    ' 並び替えの設定
    With ws.Sort
        .SortFields.Clear
        
        ' M列を色順で並び替え
        .SortFields.Add Key:=ws.Range("M3"), SortOn:=xlSortOnCellColor, SortOnValue.Color = RGB(255, 0, 0)
        .SortFields.Add Key:=ws.Range("M3"), SortOn:=xlSortOnCellColor, SortOnValue.Color = RGB(226, 107, 10)
        
        ' A列を降順
        .SortFields.Add Key:=ws.Range("A3"), Order:=xlDescending
        
        ' B列を降順
        .SortFields.Add Key:=ws.Range("B3"), Order:=xlDescending
        
        ' 並び替え範囲を設定し適用
        .SetRange rng
        .Header = xlNo ' 2行目以降を対象
        .Apply
    End With
End Sub

修正ポイントの詳細解説

1. タイトル行を除外する

VBAの CurrentRegion を使うと、データ全体を自動で選択します。しかし、タイトル行まで含まれてしまうため、Offset(1,0) を使って2行目以降を対象にしました。

Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1)

これにより、タイトル行を除外し、2行目からデータ範囲を取得できます。

2. ソート範囲の適切な設定

並び替えを適用する範囲を正しく設定することが重要です。修正後のコードでは、並び替え範囲を .SetRange rng で適用し、タイトル行を含めないようにしています。

3. .Header = xlNo を設定

デフォルトでは .Header = xlGuess になっており、Excelが自動判定してしまうため、意図しない結果になることがあります。明示的に .Header = xlNo を指定することで、2行目以降をデータとして処理できます。

まとめ

VBAで表を並び替える際に、タイトル行を保持しつつ正しく並び替えを行うには、以下の点に注意する必要があります。

  • データ範囲を正しく設定し、タイトル行を除外する
  • 適切なソート範囲を指定する
  • 並び替えの際に .Header = xlNo を指定する

今回の修正コードを活用すれば、M列を色順、A列降順、B列降順で正しく並び替えることができます。ぜひ試してみてください。

コメント

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