MENU

並び替え

アプリのコード作成画面

内容を設定すると、その下の「コードの説明」のVBAコードが作成されます。

f:id:The-Alchemist:20220106161835p:plain



コードの解説

上のアプリのコード作成画面で設定したVBAコードです。

変数の宣言

Sub デモ_1() 'コピー・切り取り
Dim セル範囲 As String, セル As Range, 右下セル As String

プログラム名は、"デモ_1"です。

Dimで「変数」を宣言します。

最終行を取得し、セル範囲を決める

Sheets("sheet1").Select

・"sheet1"を選択します。

Range("a1:g1").CurrentRegion.Select

CurrentRegionで、"a1:g1"セルを含む表全体を選択します。

右下セル = Cells(Selection.Row + Selection.Rows.Count - 1, Range("g1").Column).Address(False, False)

・変数右下セルに、表の右下セルのアドレスを代入します。

セル範囲 = "a1" & ":" & 右下セル

変数セル範囲に 、"a1" から 右下セルの範囲を代入します。

Range(セル範囲).Select

セル範囲選択します。

メイン処理の呼び出し

Call デモ_1_メイン処理(セル範囲)

Callでメイン処理を呼び出します。

End Sub

End Subデモ_1()終了します。

メイン処理

Sub デモ_1_メイン処理(セル範囲 As String, 右下セル As String)
With ActiveSheet
   .Sort.SortFields.Clear
   .Sort.SortFields.Add _
       Key:=.Range("A1"), _
       Order:=xlAscending, _
       CustomOrder:="東京,名古屋,大阪", _
       DataOption:=xlSortNormal
   .Sort.SortFields.Add _
       Key:=.Range("c1"), _
       Order:=xlAscending, _
       CustomOrder:="", _
       DataOption:=xlSortNormal
   With .Sort
     .SetRange Range(セル範囲)
     .Header = xlYes
     .Orientation = xlTopToBottom
     .Apply
   End With
End With
End Sub

・ひとつの処理対象に対し、複数の処理をする場合、With処理対象~End With処理対象の記述を一つにまとめることができます。 

f:id:The-Alchemist:20220107085635p:plain

・赤色のWith ActiveSheet~End Withの間の.Sortは、ActiveSheetを省略しています。

・青色のWith.Sort~End Withの間の.SetRange.Sortを省略し、その.Sortは赤色の

   WithActiveSheet~End Withの間のためActiveSheetを省略しています。

   よって.SetRangeは、ActiveSheet.Sort .SetRangeです。

ActiveSheet.Sort.SortFields.Clear

・前回の並べ替えの設定を解除します。

ActiveSheet.Sort.SortFields.Add Key:=.Range("A1"), Order:=xlAscending, _
       CustomOrder:="東京,名古屋,大阪", DataOption:=xlSortNormal

・SortFields.Addで、並べ替えのキーを追加します。

・ Key:=.Range("A1")で、キーを”A1”セルにします。

・Order:=xlAscendingは昇順で並び替え、xlDescendingは降順です。

・CustomOrder:="東京,名古屋,大阪"は、ユーザー設定です。

 ・DataOption:=xlSortNormalは、文字列と数値を別々に並び替え、

  xlSortTextAsNumbersは、文字列を数値として並べ替えます。

f:id:The-Alchemist:20220106182326p:plain

ActiveSheet.Sort.SetRange Range(セル範囲)

・Sort.SetRangeで、並べ替えを行うセル範囲を設定します。

ActiveSheet.Sort.Header = xlYes

先頭行を見出しとして使用します。xlNoは、セル範囲全体が並び替えられます。

f:id:The-Alchemist:20220106170401p:plain

ActiveSheet.Sort.Apply

・並べ替えを実行します。

 

アプリはこちらから↓↓↓↓