教えて!ExcelVBA!

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

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

       f:id:m_kbou:20200419124217p:plain

データ範囲を並べ替えする方法(昇順「小さい値から大きい値へ順番に並べ替え」や降順「大きい値から小さい値へ順番に並べ替え」)について説明します。

 

【目次】

 

構文

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

(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と記述し、3つ目の並べ替えキーを指定するにはKey3:=Range(”[KEY③]”), Order3:=xlAscendingと記述します。[KEY②][KEY③]には同様に並べ替え対象列のセルを指定し、各々Order2:=xlAscending及びOrder3:=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と記述し、3つ目の並べ替えキーを指定するにはKey3:=Range(”[KEY③]”), Order3:=xlDescendingと記述します。[KEY②][KEY③]には同様に並べ替え対象列のセルを指定し、各々Order2:=xlDescending及びOrder3:=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:20190528084317p:plain

[記述例]:

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

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

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:20190528084353p:plain

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

 

並べ替え(降順)

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

[サンプル]:

f:id:m_kbou:20190528084317p:plain

[記述例]:

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

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

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:20190528084415p:plain

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

 

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

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

[サンプル]:

f:id:m_kbou:20190528084317p:plain

[記述例]:

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

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

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:20190528084430p:plain

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

 

おわりに

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