教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA セル操作】セル範囲内を並べ替え(Sort)するにはどうすればいいの?教えて!

f:id:m_kbou:20200419124217p:plain

データ範囲を並べ替えするにはSortメソッドを使用します。並べ替えには昇順(小さい値から大きい値へ順番に並べ替え)と降順(大きい値から小さい値へ順番に並べ替え)の2パターンがあります。ExcelVBAでデータ操作をする上では頻繁に使用する内容となりますので、是非理解してもらいたいと思います。このデータ範囲の並べ替えについて紹介します。

 

 

構文

記述方法は以下の通りとなります。

(1)昇順方法

Range(”[セルの範囲]”).Sort _
  Key1:=Range(”[KEY①]”), Order1:=xlAscending, _
  Key2:=Range(”[KEY②]”), Order2:=xlAscending, _
  Key3:=Range(”[KEY③]”), Order3:=xlAscending

[説明]:

[セルの範囲]には並べ替えをするデータの範囲を指定します。並べ替えはSortメソッドを使用します。並べ替えをするキーは最大で3つ指定する事ができます。

-----------------------------

1つ目の並べ替えキーを指定するには「Key1:=Range(”[KEY①]”), Order1:=xlAscending」と記述し、[KEY①]には並べ替え対象列のセルを指定します。また、Order1:=xlAscendingを記述する事で、昇順の並べ替え指定(xlAscendingの部分が昇順との意味)になります。

-----------------------------

2つ目の並べ替えキーを指定するには「Key2:=Range(”[KEY②]”), Order2:=xlAscending」と記述し、[KEY②]には並べ替え対象列のセルを指定します。また、Order2:=xlAscendingを記述する事で、昇順の並べ替え指定(xlAscendingの部分が昇順との意味)になります。

-----------------------------

3つ目の並べ替えキーを指定するには「Key3:=Range(”[KEY③]”), Order3:=xlAscending」と記述し、[KEY③]には並べ替え対象列のセルを指定します。また、Order3:=xlAscendingを記述する事で、昇順の並べ替え指定(xlAscendingの部分が昇順との意味)になります。

-----------------------------

内容を纏めると、「[セルの範囲]に指定されているデータを、最初に[KEY①]で指定されたセルで昇順に並び替えし、次に[KEY②]で指定されたセルで昇順に並び替えし、最後に[KEY③]で指定されたセルで昇順に並び替えて下さい。」との意味になります。並べ替えするキー項目が1つしか無い場合([KEY①]のみで並べ替えする場合)は、2つ目・3つ目の並べ替えキーの指定は省略する事もできます。

[記述例]:

Range("A1:C5").Sort _
        Key1:=Range("A1"), Order1:=xlAscending, _
        Key2:=Range("B1"), Order2:=xlAscending, _
        Key3:=Range("C1"), Order3:=xlAscending

(2)降順方法

Range(”[セルの範囲]”).Sort _
  Key1:=Range(”[KEY①]”), Order1:=xlDescending, _
  Key2:=Range(”[KEY②]”), Order2:=xlDescending, _
  Key3:=Range(”[KEY③]”), Order3:=xlDescending

[説明]:

[セルの範囲]には並べ替えをするデータの範囲を指定します。並べ替えはSortメソッドを使用します。並べ替えをするキーは最大で3つ指定する事ができます。

-----------------------------

1つ目の並べ替えキーを指定するには「Key1:=Range(”[KEY①]”), Order1:=xlDescending」と記述し、[KEY①]には並べ替え対象列のセルを指定します。また、Order1:=xlDescendingを記述する事で、降順の並べ替え指定(xlDescendingの部分が降順との意味)になります。

-----------------------------

2つ目の並べ替えキーを指定するには「Key2:=Range(”[KEY②]”), Order2:=xlDescending」と記述し、[KEY②]には並べ替え対象列のセルを指定します。また、Order2:=xlDescendingを記述する事で、降順の並べ替え指定(xlDescendingの部分が降順との意味)になります。

-----------------------------

3つ目の並べ替えキーを指定するには「Key3:=Range(”[KEY③]”), Order3:=xlDescending」と記述し、[KEY③]には並べ替え対象列のセルを指定します。また、Order3:=xlDescendingを記述する事で、降順の並べ替え指定(xlDescendingの部分が降順との意味)になります。

-----------------------------

内容を纏めると、「[セルの範囲]に指定されているデータを、最初に[KEY①]で指定されたセルで降順に並び替えし、次に[KEY②]で指定されたセルで降順に並び替えし、最後に[KEY③]で指定されたセルで降順に並び替えて下さい。」との意味になります。並べ替えするキー項目が1つしか無い場合([KEY①]のみで並べ替えする場合)は、2つ目・3つ目の並べ替えキーの指定は省略する事もできます。

[記述例]:

Range("A1:C5").Sort _
        Key1:=Range("A1"), Order1:=xlDescending, _
        Key2:=Range("B1"), Order2:=xlDescending, _
        Key3:=Range("C1"), Order3:=xlDescending

 

使い方

使い方について具体的に説明します。

並べ替え(昇順)

以下のサンプルを元に、並べ替え(昇順)について説明します。

[サンプル]:

f:id:m_kbou:20210414082121p:plain

[プログラミング例]:

Sub サンプル()
  Range("A1:C5").Sort _
    Key1:=Range("A1"), Order1:=xlAscending, _
    Key2:=Range("B1"), Order2:=xlAscending, _
    Key3:=Range("C1"), Order3:=xlAscending
End Sub

内容は、「A1セル~C5セルの範囲を、最初にA1セルをキーとして昇順に並べ替え、次にB1セルをキーに昇順に並べ替え、最後にC1セルをキーに昇順に並べ替えして下さい。」との意味になります。

f:id:m_kbou:20210414082203p:plain

※上記の記述例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。

[実行例]:

①A1セル~C5セルにデータが入力されています。このデータをA列>B列>C列の順で昇順での並べ替えを行います。並べ替えを行うため<実行>ボタンをクリックします。このボタンには上記のプログラミング例のプログラムが登録されています。(※ボタンの作り方やボタンにプログラムを割り当てるにはこちらを参考にして下さい。)

f:id:m_kbou:20210414082222p:plain

②結果は以下の様になります。A列>B列>C列の順で昇順の並べ替えがされました。

f:id:m_kbou:20210414082233p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

並べ替え(昇順)についての説明は以上です。

 

並べ替え(降順)

以下のサンプルを元に、並べ替え(降順)について説明します。

[サンプル]:

f:id:m_kbou:20210414082121p:plain

[プログラミング例]:

Sub サンプル()
  Range("A1:C5").Sort _
    Key1:=Range("A1"), Order1:=xlDescending, _
    Key2:=Range("B1"), Order2:=xlDescending, _
    Key3:=Range("C1"), Order3:=xlDescending
End Sub

内容は、「A1セル~C5セルの範囲を、最初にA1セルをキーとして降順に並べ替え、次にB1セルをキーに降順に並べ替え、最後にC1セルをキーに降順に並べ替えして下さい。」との意味になります。

f:id:m_kbou:20210414084209p:plain

※上記の記述例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。

[実行例]:

①A1セル~C5セルにデータが入力されています。このデータをA列>B列>C列の順で降順での並べ替えを行います。並べ替えを行うため<実行>ボタンをクリックします。このボタンには上記のプログラミング例のプログラムが登録されています。(※ボタンの作り方やボタンにプログラムを割り当てるにはこちらを参考にして下さい。)

f:id:m_kbou:20210414084225p:plain

②結果は以下の様になります。A列>B列>C列の順で降順の並べ替えがされました。

f:id:m_kbou:20210414084239p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

並べ替え(降順)についての説明は以上です。

 

並べ替え(昇順・降順混在)

以下のサンプルを元に、並べ替え(昇順・降順混在)について説明します。

[サンプル]:

f:id:m_kbou:20210414082121p:plain

[プログラミング例]:

Sub サンプル()
  Range("A1:C5").Sort _
    Key1:=Range("A1"), Order1:=xlAscending, _
    Key2:=Range("B1"), Order2:=xlDescending, _
    Key3:=Range("C1"), Order3:=xlAscending
End Sub

内容は、「A1セル~C5セルの範囲を、最初にA1セルをキーとして昇順に並べ替え、次にB1セルをキーに降順に並べ替え、最後にC1セルをキーに昇順に並べ替えして下さい。」との意味になります。

f:id:m_kbou:20210414085353p:plain

※上記の記述例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。

[実行例]:

①A1セル~C5セルにデータが入力されています。このデータのA列を昇順で並べ替え、B列を降順で並べ替え、C列を昇順で並べ替えを行います。並べ替えを行うため<実行>ボタンをクリックします。このボタンには上記のプログラミング例のプログラムが登録されています。(※ボタンの作り方やボタンにプログラムを割り当てるにはこちらを参考にして下さい。)

f:id:m_kbou:20210414085409p:plain

②結果は以下の様になります。A列を昇順で並べ替え、B列を降順で並べ替え、C列を昇順で並べ替えがされました。

f:id:m_kbou:20210414085423p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

並べ替え(昇順・降順混在)についての説明は以上です。

 

おわりに

並べ替えはデータを扱う上では必須の作業となります。今回の説明内容を有効に活用して頂き、是非業務効率向上に役立ててもらえればと思います。