エクセルVBA 並び替えのための複数条件を束ねるプロシージャーを作成します。
スイッチング的機能でそれぞれの条件をまとめ、最終的に実行するためのVBAコードです。
こんにちは じゅんぱ店長 (@junpa33) です。
VBAを使って、エクセルのセルデータの並び替えを行うツールを作成しています。
これまで、並び替えに必要な環境や条件を個別に説明、処理コードを作成してきました。
そして、実際に並び替えを実行するには、それらの条件を整理して順番に実行して行くコントロールセンターのようなまとめるプロシージャーが必要になります。
今回は、そのプロシージャーを説明して行きます。
並び替えマクロ 記事階層
- マクロツール使い方と無料ダウンロード
- マクロツール作成手順
- 並び替えマクロを作成するVBAコードの概要
- 条件設定ボタンとボックスを配置するユーザーフォームのデザイン
- UserFormに設置したコントロールのイベントコードを記述する
- 別シートにまたぐのは可能?並び替えのコード設計
- 条件入力用のユーザーフォーム 表示・非表示と値の保存
- セル範囲内の空白行や結合にも対応したSortオブジェクトVBA
- 複数列に自由にキーを設定するVBA。Sort条件設定のコード
- 複数の背景色キーを指定できるVBAコードの組み立て
- 種類の違うKeyの同時指定はどちらが優先?VBAでは記述順
- 共有できない問題も解決!ユーザー設定リストの外部ファイル導入法
- 複数条件をまとめるプロシージャーを作成する
- 結果の切り出し機能 必要範囲をコピーし別シートに張付け
- 簡単に並びを解除するリスタート機能。再実行も即可能になる
- 並び替えマクロツール作成の全コード集
- 並び替えマクロを作成するVBAコードの概要
- 実際に使ってみる
この記事の番号は10番です。
コンテンツ
複数の条件をまとめる実行プロシージャー
まず、実行するための複数の条件を列記しておきます。
- 並び替えしたいデータエリア全体
- データ範囲のタイプ
- 先頭行のタイプ
- キーの選択
- 並びの順序(ユーザー設定リスト利用)
- 並び替えの実行(データ範囲タイプ別)
- データ切り出し用情報取得
①から⑦までのそれぞれの条件の処理については、すでにプロシージャーを作成準備しました。
条件を処理するこれらのプロシージャーを適宜動作させて、並び替えを実施完了させることになります。
そしてこの、一連の流れを束ねるのが今回作成するまとめるプロシージャーになります。
このプロシージャーを実行する方法は、ユーザーフォーム「ソートナビゲーター」の「並び替え実行」ボタンのクリックイベントで起動します。
まとめるプロシージャーのVBAコードの内容
まとめるプロシージャーのVBAコードについてそれぞれの条件処理を見ていきます。
実際の条件の各処理については、対応する各プロシージャーが行いますので、
ここに記述するVBA「並び替え作業」をまとめるプロシージャーは、その時の並び替えに必要な条件を「その条件に対応したプロシージャーへのスイッチング」が主な役割になります。
条件を束ねる方法として、
利用者が設定した条件で、その条件を適用するためにコード処理が殆ど必要ない条件については、
「並び替え実行」のイベントモジュールのプロシージャーによって、イベントモジュールでの変数処理後、ダイレクトに、それぞれの条件処理のプロシージャーへ送られています。
条件① 並び替えしたいデータエリア全体
Sub 並び替え作業()
Dim ANS As Long
DataSN = ws.Name
If DataNSN <> DataSN Then
MsgBox "シートが変更されましたので、並び替えデータシート" _
& "全体のチェックが必要です。" & vbCrLf & _
"「並び替えデータシート全体チェック」をまず実行して" _
& "ください。", vbInformation, "実行するには・・"
Exit Sub
End If
Set SSRange = Nothing
If Not DataRange = "Type1" Then
If ErEnd = True Then
ANS = MsgBox("「条件設定の不備」を修正しましたか?" _
, vbYesNo + vbQuestion, "確認")
If ANS = 7 Then
MsgBox "不備を修正してください。終了します。"
Exit Sub
Else
ErEnd = False
End If
End If
End If
この「並び替え作業」というまとめるプロシージャーが、実行された時のアクティブシートが、並び替えデータがあるシートになります。
このアクティブシートについてですが、
このプロシージャー実行前に行った、「データエリア全体把握」の対象のシートと同じものかどうかをチェックします。
もし違っていれば、「別シートまたぎ」ということになります。
同じであれば、以降のVBAコードを進行させますが、違って入れは、メッセージを出してプロシージャーを終了させます。
変数DataNSNは「データシート全体のボリュームを把握」で取り出した変数です。
条件② データ範囲のタイプ
If DataRange = "Type1" Then
Set SSRange = SortAreaA
ElseIf DataRange = "Type2" Then
Set SSRange = SortAreaB
ElseIf DataRange = "Type3" Then
Set SSRange = SortAreaC
ElseIf DataRange = "Type4" Then
Set SSRange = SortAreaD
End If
If ErEnd = True Then
MsgBox "一旦終了します。"
Exit Sub
End If
並び替えのデータ範囲が4タイプあり、ユーザーフォームから入力された条件で、それに合ったデータ範囲の設定をします。
そしてこのVBAコードで、「範囲指定条件の変数SSRange」に代入します。
このデータ範囲の設定時点で、エラーが発生していた時はここでプロシージャーを実行中止にします。
変数「SortAreaA」「SortAreaB」「SortAreaC」「SortAreaD」は範囲の選択パターンで取り出した変数です。
プロシージャーの記述の最後に、データ範囲4のパターンの「部分範囲指定のテキストボックス表示」(ユーザーフォーム上)をデフォルト(白紙)に戻しておきます。
ソートナビゲーター.部分範囲指定表示.Value = ""
条件③ 先頭行のタイプ
先頭行のタイプの条件は、「見出し」か「見出しではない」かです。
この条件は、イベントプロシージャー「並び替えGO」から直接並び替え実行のプロシージャーへ条件指示を行います。
条件④ キーの選択
この部分の条件は、それぞれのイベントプロシージャーで変数に値をセットして、並び替え実行のプロシージャーへ条件を送っています。
条件⑤ 並び替えの順序(ユーザー設定リスト)
If CusOdr1 = "ON" Then
MsgBox "並び替え列1のユーザー設定リストの設定"
CusOdr1V = CusOdr
End If
If CusOdr2 = "ON" Then
MsgBox "並び替え列2のユーザー設定リストの設定"
CusOdr2V = CusOdr
End If
If CusOdr3 = "ON" Then
MsgBox "並び替え列3のユーザー設定リストの設定"
CusOdr3V = CusOdr
End If
このコードで、ユーザーリストによる並び替えの条件をまとめます。
ユーザー設定リストを使う場合に、リストの選択と変数へ ” リストのデータ ” を代入します。
3つの列キーそれぞれに実行します。
変数CusOdrはユーザー設定リストを外部入力するVBAで作成した変数です。
プロシージャーの記述の最後に、ユーザー設定リストをデフォルト(白紙)に戻しておきます、
CusOdr1V = ""
CusOdr2V = ""
CusOdr3V = ""
条件⑥ 並び替えの実行(データ範囲タイプ別)
If SortType = "StypeA" Then
Call Module1.Sort実行
ElseIf SortType = "StypeB" Then
Call Module1.Sort背景色
ElseIf SortType = "StypeC" Then
Call Module1.Sort列から背景色
ElseIf SortType = "StypeD" Then
Call Module1.Sort背景色から列
Else
Call Module1.Sort実行
End If
このコードで、キーの優先度に応じた並び替えの実行をまとめます。
列キーだけで実行、背景色だけで実行、列キー優先+背景色で実行、背景色優先+列キーで実行の4タイプに振り分けます。
条件⑦ データ切り出し用情報取得
With SSRange
If SSRange Is Nothing Then Exit Sub
DCutr = .Row
DCutc = .Column
DCutEr = .Rows.Count + DCutr - 1
DCutEc = .Columns.Count + DCutc - 1
End With
データ切り出し機能で利用するための情報を取得しています。
データ範囲の始まりのセルと終わりのセルの番地を取得します。
まとめるプロシージャーのまとめ
プロジェクトを完成させるためには、通常、複数の設定条件をそれぞれに処理し、最後に出揃ったものを一つにまとめ上げ最終的に実行するためのまとめるプロシージャーが必要になります。
条件処理のメインはそれぞれ個別処理のプロシージャーになります。
統括プロシージャーは、それぞれの条件の最終スイッチング的なものになってくると思います。
プロジェクトのためのコード設計的には、色々な手法がありますので、一概には言えませんが、スッキリした手法だと思います。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。