📊 Excel VBA Top100
🔄

SortData

データ処理

A列(A1:A100)のデータを昇順に並び替えます

選択したデータ範囲を指定した列を基準に昇順・降順でソートするマクロです。Excelの並び替え機能をVBAで自動化しており、ヘッダー行の有無・ソート基準列・昇順降順をダイアログで指定できます。複数の並び替え条件(第一キー・第二キーなど)にも対応しており、日付・数値・文字列のいずれのデータ型でも正確にソートします。定期的に同じ条件でデータを並び替える業務の自動化に最適です。SortオブジェクトをVBAから制御する標準的な実装のため、動作はExcelの並び替え機能と完全に同じで安心です。手動ソートで起こりがちな「ヘッダーまで一緒に並んでしまった」「隣の列が置き去りになってデータがずれた」という事故を、マクロ化によって仕組みごと防止できます。毎日・毎週同じ条件で並び替える業務ほど、マクロ化の効果が大きくなります。

SortData デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: アクティブシートのA1:A100にデータを用意してマクロを実行。A列が昇順に並び替えられます(1行目はヘッダーとして保持)。

🎯 活用シーン

  • ✓売上データを金額の大きい順に並び替えてランキングを作成し、上位顧客や商品を一目で確認したいとき
  • ✓スケジュール表や予定リストを日付順に並び替えて時系列で管理したいとき
  • ✓名簿や連絡先リストを名前のあいうえお順に並び替えて検索しやすくしたいとき
  • ✓日々追加される受注データを毎朝受注日順に並び替えて、処理順を確認したいとき
  • ✓成績・スコアデータを高い順に並び替えて、上位者の一覧を素早く作成したいとき

💡 実装のヒント

  • ▸ヘッダー行がある場合は「ヘッダーあり」を選択してください。ヘッダー行もデータとしてソートされてしまう誤操作を防げます。
  • ▸日付データは日付型として認識されている必要があります。文字列として保存された日付は正しくソートされない場合があります。
  • ▸ソート後は元の並び順に戻せないため、元の並び順が必要な場合は事前に連番列を追加しておくと、後から元の順序に戻せます。
  • ▸元の順序に戻す可能性がある場合は、実行前にAddSerialNumbersで連番列を追加しておくと、その列でソートし直すだけで復元できます。
  • ▸降順にしたい場合はコード内のOrder引数をxlDescendingに変更するだけです。

💻 VBAコード

Sub SortData()
    On Error GoTo ErrHandler
    Dim ws As Worksheet
    Set ws = ActiveSheet
    
    If ws Is Nothing Then
        MsgBox "アクティブなシートが見つかりません", vbCritical
        Exit Sub
    End If
    
    If Application.WorksheetFunction.CountA(ws.Range("A1:A100")) = 0 Then
        MsgBox "データが見つかりません", vbCritical
        Exit Sub
    End If
    
    ws.Sort.SortFields.Clear
    ws.Sort.SortFields.Add Key:=ws.Range("A1:A100"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ws.Sort
        .SetRange ws.Range("A1:A100")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlSortRows
        .SortMethod = xlPinYin
        .Apply
    End With
    
Exit Sub
ErrHandler:
    MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub