教えて!ExcelVBA!

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

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

f:id:m_kbou:20200419124217p:plain

データ範囲を並べ替えするにはSortメソッドを使用します。ExcelVBAでデータ操作をする上では頻繁に使用する内容となりますので、是非理解してもらいたいと思います。また、今回はExcel2003までの並べ替え方法について紹介します。

 

 

構文

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

Range(”[セルの範囲]”).Sort _
  Key1:=Range(”[KEY①]”), Order1:=[並べ替え方法①], _
  Key2:=Range(”[KEY②]”), Order2:=[並べ替え方法②], _
  Key3:=Range(”[KEY③]”), Order3:=[並べ替え方法③]

[説明]:

セル範囲内を並べ替えするには

 「Range(”[セルの範囲]”).Sort _
  Key1:=Range(”[KEY①]”), Order1:=[並べ替え方法], _
  Key2:=Range(”[KEY②]”), Order2:=[並べ替え方法], _
  Key3:=Range(”[KEY③]”), Order3:=[並べ替え方法]」

と記述します。

[セル範囲] 並べ替えをしたいセル範囲を記述します。
※「”」(ダブルクォーテーション)で囲みます。
[KEY①]
[KEY②]
[KEY③]
並べ替え列を記述します。
※「”」(ダブルクォーテーション)で囲みます。
[並べ替え方法]

並べ替え方法を記述します。
昇順:「xlAscending」を指定
降順:「xlDescending」を指定

[記述例]:

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

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

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

 

使い方

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

並べ替え(昇順)

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

[サンプル]:

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

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

 

おわりに

並べ替えはデータを扱う上では必須の作業となります。今回の説明内容を有効に活用して頂き、是非業務効率向上に役立ててもらえればと思います。また、類似の内容としてExcel2007以降の並べ替え方法もあります。こちらも参考にして下さい。