簡単に並びを解除するリスタート機能。再実行も即可能になる

vbanarabirestarteyecatch

エクセルVBAでの並び替え結果を、簡単に解除、元に戻すことが出来るリスタート機能の説明です。

この機能を使えば、すぐに次の別キーでの並び替えを再実行出来ます。

こんにちは じゅんぱ店長 (@junpa33) です。

VBAを使って、エクセルのセルデータの並び替えを行うツールを作成しています。

今回は、すでに行った並び替えを解除して、最初の状態に戻すことが出来る「リスタート機能」について説明します。

この機能を発揮させるためには、いくつかの条件が必要ですが使って便利な機能になります。

エクセルの標準の並び替えツールでは装備されていない機能です。

並び替えマクロ 記事階層

この記事の番号は12番です。

リスタート機能とは

リスタート機能とは、「再実行」機能ということです。

同じデータ資料について、何度も、並び替えを行ないたい時には、そのたびに並び順を元の最初の状態に戻さないといけません。

この作業は結構面倒で、リバース手順を間違えれば、もつれた糸の様に余計にデータ並びが絡まってしまいます。

でも、このリスタート機能を使えれば、1クリックで元の最初の状態に戻すことが出来ます。

リスタート機能は、エクセルシートでA列基準で昇順並びに1クリックで戻す機能です。

リスタート機能を使うためには、前提条件(必要条件)があります。

  • 対象シートが「A列基準で昇順並び」がデフォルト状態になっている。(ここから、並び替えがスタートしている)

リスタート機能使用時にも条件があります。

  • A列がID番号などの並び替え可能な数値になっている。
  • 適用される範囲は、A1セルから空白行、空白列に当たるまでのエリアに適用される。
  • エリア内の結合セルがある場合は、リスタート機能が実行されない。
  • 並び替え範囲を「部分範囲指定」した場合はリスタート機能は無効になる。

リスタート機能のプロシージャー

「リスタート実行」としてプロシージャーを作成しています。

VBA
Sub リスタート実行()
    ErEnd = False
    Dim ANS, Ans1 As Long
    
        If AreaVAlert = True Then
            MsgBox "並び替えの部分指定でデータ幅不一致の場合は、" _
                & "この機能は使用できません。"
            Exit Sub
        End If
        DataSN = ws.Name
        If DataNSN <> DataSN Then
            MsgBox "シートが変更されましたので、並び替えデータ" _
                & "シート全体のチェックが必要です。" & vbCrLf & _
                "「並び替えデータシート全体チェック」をまず実行" _
                & "してください。", vbInformation, "実行するには・・"
        Exit Sub
        End If
    If ADRange Is Nothing Then
        MsgBox "並び替えデータシート全体のチェックが必要です。" _
            & vbCrLf & "「並び替えデータシート全体チェック」を" _
            & "まず実行してください。" _
            , vbInformation, "実行するには・・"
        Exit Sub
    End If
        If ErEnd = True Then
            MsgBox "この操作は、条件設定の不備により実行されません。"
            Exit Sub
        End If
        On Error Resume Next
        With ws
            .Sort.SortFields.Clear
            .Sort.SortFields.Add Key:=Range("A1"), Order:=xlAscending
            .Sort.SetRange ADRange.CurrentRegion
            With ソートナビゲーター
                If .先頭行は見出し行 = True Then
                    ws.Sort.Header = xlYes
                ElseIf .先頭行はデータ行 = True Then
                    ws.Sort.Header = xlNo
                Else
                    MsgBox "先頭行のタイプを選んでください。" _
                        , vbExclamation, "再試行"
                    Exit Sub
                End If
            End With
            Ans1 = MsgBox("A列基準で昇順並び替えを実行します。よろしい" _
                & "ですか?", vbOKCancel + vbExclamation, "実行確認")
            If Ans1 = 2 Then
                MsgBox "承知しました中止します。"
                Exit Sub
            Else
                .Sort.Apply
            End If
        End With
        On Error GoTo 0
End Sub

If AreaVAlert = True Then は、

並び替えデータ範囲環境の指定でパターン④を選択している場合は、そもそもA列が並び替え範囲内にあるかどうか不定になります。

したがって、このパターン④選択時にはこのリスタート機能はOFFになる様にセットしています。

If DataNSN <> DataSN Then は、

初期設定の「データシート全体チェック」を行ったシートとリスタート機能を使用するシートが異なる場合は、そのままではリスタートを実行できないようにしています。

リスタートを実行するシートで「データシート全体チェック」を行う必要があります。

If ErEnd = True Then は、

並び替え実行時にその条件設定などで、条件入力ウインドウの「キャンセル」ボタンをクリックして並び替え中止した場合に設定した条件です。

この場合も、条件設定不備としてリスタート機能を実行することが出来ません。

このプロシージャーを実行するためには、前提の条件を色々設定していますが、

要するに、A列の数値キーを基準に、セルA1より昇順の並び替えを行なっています。

まとめ

リスタート機能を利用するには、少し前提条件が必要になっています。

その条件が整っていないと・・・ということではありますが、基本、よく使う並び替えのパターンで有ればそんなには問題は無いのではないでしょうか。

つまり、

「A1セルがスタートでA列はデータID番号にしておく。」

があれば、ほぼ利用可能ということです。

部分並び替えを行った場合は、部分並び替えで元に戻すようにしてください。その場合は、元並びが復元できるデータID番号などがその並び替え範囲内にある必要があります。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min