Excelでデータを自動で並び変えたいときはないでしょうか。
けど、そんな中で悩むことは、
・ボタン押下でデータを並び変えたいが方法がよくわからない
ですよね。
今回はそんなお悩みを解決する
・ボタンからにマクロを起動しデータを並び変える方法
についてまとめます!
もくじ
Excelのデータを自動で並び変えるイメージ
Excelのデータを自動で並び変えるイメージについて説明をします。
はじめはSORT関数を手入力しデータを自動で並び変えていきます。
サンプルでは番号項目を昇順、売上高を降順になるよう設定をしています。
次にボタンを配置し、マクロを関連付けします。
ボタンをクリックするとマクロが実行され、指定の並び順で表が作成されます。
次にボタンをもうひとつ増やし、並び順が昇順、降順と切り替わるようにします。
ボタンをクリックすれば一瞬で昇順、降順の切り替えができます。
プレゼンの時にボタンクリックで並び替えられると便利ですね!
それでは早速実装して試してみましょう!
データを自動で並び変える対象の表を用意する
データを自動で並び変える対象となる表を用意しましょう。
サンプル表は以下のようA列を番号、B列を商品名、C列を売上にしました。
F列以降に指定した並び順になったデータが表示されるようしていきます。
SORT関数の書式/機能/引数について
今回データを自動で並び変える処理に使用するSORT関数について説明をします。
SORT関数の書式と機能については以下の通りです。
関数名 | SORT |
---|---|
書式 | 範囲または配列の内容を並べ替えます。 |
機能 | =SORT([範囲], [並べ替えインデックス], [順序], [方向]) |
引数 | 範囲:並び替えの対象となる範囲を指定します。 並べ替えインデックス:並べ替えの基準となる行または列番号を指定します。既定は1です。 順序:目的の並べ替え順序を数値で指定します。昇順の場合は 1で既定、降順の場合は -1となります。 方向:目的の並べ替え方向を示す論理値を指定します。FALSE(既定)の場合は、行で並べ替え、TRUE の場合は、列で並べ替えます。 |
エラー値 | #VALUE! |
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列の要素数をカウントします。
また、別の列で最終行判定したい場合は、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関数を使用しますが、ボタンから実行できるマクロに組み入れる必要があります。
ボタンに登録するマクロの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, <strong>1</strong>)
表の範囲を変更する場合は”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で順序に割り当たりますので降順が指定される形となります。
ボタンの名前を降順を示す内容に変更しましょう。
ボタンから引数を受け渡しマクロを実行する
ボタンから引数を受け渡しマクロを実行してみます。
ボタンをクリックします。
はい、引数の値が割り当てられ昇順に並びましたね。
2つ目のボタンを設定する
次は2つ目のボタンを追加し、昇順になるよう設定を変更しましょう。
ボタンの設定をする
次にボタンに登録されているマクロに引数を持たせるように設定変更をします。
ボタンを右クリックし、マクロの登録を選択します。
以下を入力します。
<ブック名>.xlsm!'SORT関数を設定し配置する_並び順指定 "1"'
引数は1で順序に割り当たりますので昇順が指定される形となります。
ボタンの名前を昇順を示す内容に変更しましょう。
ボタンから引数を受け渡しマクロを実行する
ボタンから引数を受け渡しマクロを実行してみます。
ボタンをクリックします。
はい、降順に並び替えられましたね。
さいごに
いかがでしょうか。
今回は、
・ボタンからにマクロを起動しデータを並び変える方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す