SORT関数でデータを自動で並び変える方法!ボタンから並び替えも可!

Excelでデータを自動で並び変えたいときはないでしょうか。

けど、そんな中で悩むことは、

・Excelのデータを自動で並び変えたいが方法がよくわからない
・ボタン押下でデータを並び変えたいが方法がよくわからない

ですよね。

今回はそんなお悩みを解決する

・SORT関数でデータを自動で並び変える方法
・ボタンからにマクロを起動しデータを並び変える方法

についてまとめます!

Excelのデータを自動で並び変えるイメージ

Excelのデータを自動で並び変えるイメージについて説明をします。

はじめはSORT関数を手入力しデータを自動で並び変えていきます。

サンプルでは番号項目を昇順、売上高を降順になるよう設定をしています。

次にボタンを配置し、マクロを関連付けします。

ボタンをクリックするとマクロが実行され、指定の並び順で表が作成されます。

次にボタンをもうひとつ増やし、並び順が昇順、降順と切り替わるようにします。

ボタンをクリックすれば一瞬で昇順、降順の切り替えができます。

プレゼンの時にボタンクリックで並び替えられると便利ですね!

それでは早速実装して試してみましょう!

データを自動で並び変える対象の表を用意する

データを自動で並び変える対象となる表を用意しましょう。

サンプル表は以下のようA列を番号、B列を商品名、C列を売上にしました。

F列以降に指定した並び順になったデータが表示されるようしていきます。

SORT関数の書式/機能/引数について

今回データを自動で並び変える処理に使用するSORT関数について説明をします。
SORT関数の書式と機能については以下の通りです。

関数名 SORT
書式 範囲または配列の内容を並べ替えます。
機能 =SORT([範囲], [並べ替えインデックス], [順序], [方向])
引数 範囲:並び替えの対象となる範囲を指定します。
並べ替えインデックス:並べ替えの基準となる行または列番号を指定します。既定は1です。
順序:目的の並べ替え順序を数値で指定します。昇順の場合は 1で既定、降順の場合は -1となります。
方向:目的の並べ替え方向を示す論理値を指定します。FALSE(既定)の場合は、行で並べ替え、TRUE の場合は、列で並べ替えます。
エラー値 #VALUE!

タカヒロ
タカヒロ
SORT関数はMicrosoft365以降で実装された機能となりますので、それ以前のバージョンでは使用できないことご了承願います。

SORT関数でデータを自動で並び変える

さっそくSORT関数でデータを自動で並び変えてみましょう。

表を作成したシートのF2セルに以下の数式を入力します。

=SORT(A2:C8,1,1,FALSE)

はい、並び替えができましたね。

SORT関数の第1引数「範囲」にA2:C8を指定し、

その範囲の1列目つまりA列を指定し昇順に並び替えています。

次はA列の「番号」以外の項目にも並べ替え順序を指定し、データを並び替えてみましょう。

SORT関数で複数の並べ替え順序を指定する

SORT関数で複数の並べ替え順序を指定する方法について説明します。

SORT関数の順序を指定する第2引数「並び替えインデックス」を{ }で囲み、対象となる列番号を指定します。

第3引数「順序」を{ }で囲み、対象となる列番号順に順序を指定します。

例えば、1列目A列を昇順、3列目C列売上を降順にしたい場合は以下のようにします。

=SORT(A2:C8,{1,3},{1,-1},FALSE)

表を作成したシートのF2セルに数式を入力しましょう。

はい、A列が昇順、C列が降順に並び替えができましたね。

SORT関数の範囲で指定する最終行を自動的に取得する

これまでSORT関数の範囲は「A2:C8」のように固定値でした。
この場合、9行目以降にデータが追加されたとしてもSORT関数の結果には反映されません。

これを解消するために、最終行判定を自動的に行うようにし、データが追加されたとしてもSORT関数側でもきちんと反映されるようにしていきます。

A列の最終行の位置番号を取得する

COUNTA(A:A)

まずは、A列を対象に最終行の位置番号を取得していきます。

COUNTA関数を使い、A列の要素数をカウントします。

タカヒロ
タカヒロ
COUNTA関数はセルに値がある数を数えるので、対象列に空セルがないようお願いします。
また、別の列で最終行判定したい場合は、A:Aの部分を対象列名に変更してください。

範囲の文字列を生成する

次に最終行数と範囲の内容の文字列を結合していきます。

"A1:C"&COUNTA(A:A))

文字列を範囲として認識させる

仕上げに結合した文字列を範囲として認識するようINDIRECT関数で囲みましょう。

INDIRECT("A1:C"&COUNTA(A:A))

表の9行目以降にデータを加え、F2セルに数式を入力しましょう。

=SORT(INDIRECT("A1:C"&COUNTA(A:A)),{1,3},{1,-1},FALSE)

はい、9行目の追加データが表に反映されていますね。

ボタンクリックでデータを並び替える

次はボタンをクリックするだけでデータを並び替えるようにしてみましょう。

これまでと同様にSORT関数を使用しますが、ボタンから実行できるマクロに組み入れる必要があります。

タカヒロ
タカヒロ
マクロというと難しく感じますが、たったの3行のコードで実現できますのでご安心ください。

ボタンに登録するマクロのVBA

ボタンに登録するマクロのVBAを用意しましょう。

VBAの設定

サンプルコードは以下の通りです。

Sub SORT関数を設定し配置する()
    'SORT関数の数式を指定セルに代入します。またA列を対象に最終行を取得しています。
    Range("F2").Formula2 = "=SORT(A2:C" & Cells(1, 1).End(xlDown).Row & ",{1,3},{1,-1},FALSE)"
End Sub

関数を挿入するセルはF2にしています。もし違うセルを指定したい場合はRange(“**“)の**を変更してください。

最終行を取得し、文字列結合させSORT関数へ範囲を指定しています。

最終行判定は1列目のA列を指定していますが、別の列である場合は数値を変更してください。

Cells(1, 1)

表の範囲を変更する場合は”A2:C”の列名を変更してください。

A2:C" & Cells(1, 1).End(xlDown).Row

VBAの実装手順

実装手順は以下の通りです。

Excel側にVBAを実装していきます。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

ボタンをワークシート上へ配置する

ボタンをワークシートへ配置していきます。
開発タブの挿入アイコンをクリックし、フォームコントロールの「ボタン」を選択します。

ボタンが挿入されたらボタンの中の表示名を適当な内容に変更します。

続いて、ボタンを右クリックし、マクロの登録を選択します。
上記VBAを選択し、「OK」を押下します。

ボタンからマクロを実行し、データを並び替える

ボタンからマクロを実行してみましょう。

はい、できましたね。

2つボタンで昇順/降順の切り替えをおこなう

次に2つボタンで昇順/降順の切り替えをおこないましょう。

ボタンに引数を設定しマクロへ渡す設定をする

ボタンに昇順/降順を指定する引数を設定しマクロへ渡す設定をしてみましょう。

VBAの設定をする

サンプルコードは以下の通りです。VBEに追加をしましょう。

Sub SORT関数を設定し配置する_並び順指定(intNum As Integer)
    'SORT関数の数式を指定セルに代入します。またA列を対象に最終行を取得しています。
    Range("F2").Formula2 = "=SORT(A2:C" & Cells(1, 1).End(xlDown).Row & ",{1,3},{" & intNum & ",-1},FALSE)"
End Sub

メッセージ部分に変数を加え、引数で受け渡された値を代入するようにしています。

ボタンの設定をする

次にボタンに登録されているマクロに引数を持たせるように設定変更をします。

ボタンを右クリックし、マクロの登録を選択します。
以下を入力します。

<ブック名>.xlsm!'SORT関数を設定し配置する_並び順指定 "-1"'

引数は-1で順序に割り当たりますので降順が指定される形となります。
ボタンの名前を降順を示す内容に変更しましょう。

タカヒロ
タカヒロ
VBAに引数を追加した場合はマクロの登録ウインドウからは表示がされなくなります。

ボタンから引数を受け渡しマクロを実行する

ボタンから引数を受け渡しマクロを実行してみます。

ボタンをクリックします。

はい、引数の値が割り当てられ昇順に並びましたね。

2つ目のボタンを設定する

次は2つ目のボタンを追加し、昇順になるよう設定を変更しましょう。

タカヒロ
タカヒロ
VBAは触らず、引数のみの設定で昇順へ切り替えができます。

ボタンの設定をする

次にボタンに登録されているマクロに引数を持たせるように設定変更をします。

ボタンを右クリックし、マクロの登録を選択します。
以下を入力します。

<ブック名>.xlsm!'SORT関数を設定し配置する_並び順指定 "1"'

引数は1で順序に割り当たりますので昇順が指定される形となります。
ボタンの名前を昇順を示す内容に変更しましょう。

ボタンから引数を受け渡しマクロを実行する

ボタンから引数を受け渡しマクロを実行してみます。

ボタンをクリックします。

はい、降順に並び替えられましたね。

さいごに

いかがでしょうか。

今回は、

・SORT関数でデータを自動で並び変える方法
・ボタンからにマクロを起動しデータを並び変える方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。



タカヒロ

タカヒロ
実質無料で読めるExcelVBA本についてまとめました。
もしVBA本購入を検討されていたら、どれだけお得か確かめてみてください。

【¥0】実質無料のExcelVBAおすすめ本25選!初級~中級まで網羅!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です