【Excelマクロ】値を書き込んだらリアルタイムにソートする

効率化

下記の要望に対応するVBAマクロを作成しました。
・Excelで値を変更したら、リアルタイムに列のデータを並べ替えたい
・貼り付けなどで複数セルを一気に編集することがある。編集した範囲をまとめて並べ替えたい

値を書き込んだらリアルタイムにソート

このケースがそのまま該当することは少ないかもしれませんが、Excel作業を効率化したい方の参考になればと思い共有します。
下記のソースコードを該当シートのマクロに書けばOKです。

プログラミング的なポイントは、変更した範囲の列だけをソートして、余計な時間をかけないようにすることです。

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim colBegin As Long 'ソート対象列の開始列番号
    Dim colEnd As Long 'ソート対象列の終了列番号
    Dim colCount As Long '編集された列数
    Dim colStr As String 'ソート列名
    Dim l As Long
    Dim ws As Worksheet
    
    Set ws = ActiveSheet
    
    colBegin = Target.Column
    colCount = Target.Columns.count
    colEnd = colBegin + colCount - 1
    
    For l = colBegin To colEnd
        colStr = Split(Cells(, l).Address, "$")(1)
        'Debug.Print (colStr) 'デバッグ用 ソート対象の列名を確認
        ws.Sort.SortFields.Clear
        ws.Sort.SortFields.Add Key:=Range(colStr & "1"), Order:=xlAscending
        ws.Sort.SetRange Range(colStr & ":" & colStr)
        ws.Sort.Apply
    Next
        
End Sub

ちなみに、マクロを組むほどではないにしてもソート機能をよく使用するのであれば、ショートカット(アクセスキー)を覚えておくと便利です。ソート機能のショートカットキーは「ソート範囲を選択してAlt→h→s→u」です。

Excelでの定型作業は、ショートカット、関数、マクロを活用して、できるだけ効率化しましょう。

Excel

Posted by moto2g