目次
このチュートリアルでは、SORT関数を使ってデータ配列を動的に並べ替える方法を紹介します。 Excelでアルファベット順に並べる式、数値を昇順または降順に並べる式、複数の列で並べ替える式などを学びます。
ソート機能は以前からありましたが、Excel 365の動的配列の導入により、驚くほど簡単に数式でソートする方法が登場しました。 この方法の優れた点は、ソースデータが変更されると自動的に結果が更新されることです。
エクセルSORT関数
ExcelのSORT関数は、配列や範囲の内容を列や行単位で昇順または降順に並べ替えることができます。
SORT は,動的配列関数に属し,入力配列の形状に応じて,自動的に隣接するセルに縦または横に広がる動的配列となります.
SORT関数のシンタックスは以下の通りです。
SORT(配列, [sort_index], [sort_order], [by_col])どこで
アレイ (必須) - ソートする値の配列またはセルの範囲です。 これらは、テキスト、数字、日付、時間などを含む任意の値であることができます。
ソートインデックス (オプション) - 並べ替えの基準となる列や行を示す整数。 省略した場合は、デフォルトのインデックス1が使用されます。
ソート順 (オプション) - ソート順を定義します。
- 1 または省略(デフォルト) - 昇順、すなわち小さいものから大きいものへ
- -1 - 降順、すなわち大きいものから小さいものへ。
By_col(オプション) - 並べ替えの方向を示す論理値です。
- FALSEまたは省略(デフォルト) - 行でソートします。 ほとんどの場合、このオプションを使用します。
- TRUE - 列でソートします。 この例のように、データが列で水平に構成されている場合は、このオプションを使用します。
Excel SORT関数 - ヒントと注意点
SORTは新しい動的配列関数であり、そのため注意すべきいくつかの特異性があります。
- 現在、SORT関数はMicrosoft 365とExcel 2021でのみ利用可能です。 Excel 2019、Excel 2016は動的配列式に対応していないため、これらのバージョンではSORT関数は利用できません。
- SORT式の返す配列が最終結果である場合(つまり、他の関数に渡されない場合)、Excelは適切なサイズの範囲を動的に作成し、そこにソートされた値を入力します。 そのため、数式を入力するセルの下または右に十分な空きセルが常にあるようにしてください。そうしないと#SPILLエラーが発生します。
- ソースデータの変更に伴い、結果が動的に更新される。 しかし、その際に 勢揃い の外に追加された新しい項目を含むように自動的に拡張されるわけではありません。 勢揃い このような項目を含めるには、以下のいずれかの方法で更新する必要があります。 勢揃い を数式で参照するか、この例に示すようにソース範囲をテーブルに変換するか、動的な名前付き範囲を作成します。
Excelの基本的なSORTの計算式
この例では、Excelでデータを昇順と降順に並べ替えるための基本的な計算式を示します。
下のスクリーンショットのように、データがアルファベット順に並んでいるとします。 データを壊したり混ぜたりせずに、B列の数字を並べ替えたい場合です。
昇順にソートするための数式
B列の値を小さいものから大きいものへと並べ替えるには、次のような数式を使用します。
=sort(a2:b8, 2, 1)
どこで
- A2:B8はソース配列
- 2はソートする列番号
- 1は昇順のソート順
データは行単位で構成されているので、最後の引数を省略すると、デフォルトはFALSE - 行単位でソートされます。
空のセル(ここではD2)に数式を入力し、Enterキーを押すだけで、結果がD2:E8に自動的に流出します。
降順でソートするための数式
データを降順に、つまり大きいものから小さいものへ並べ替えるには、以下のように設定します。 ソート順 の引数を-1にすることで、このようになります。
=sort(a2:b8, 2, -1)
目的の範囲の左上のセルに数式を入力すると、このような結果になります。
同様に、テキスト値をアルファベット順にAからZへ、またはZからAへ並べ替えることができます。
Excelで数式を使ってデータを並べ替える方法
以下の例は、ExcelでのSORT関数の典型的な使い方と、そうでないものをいくつか示しています。
エクセル 並べ替え(列別
Excelでデータを並べ替える場合、通常は行の順番を変更しますが、ラベルを含む行とレコードを含む列で水平に編成されている場合、上から下ではなく、左から右への並べ替えが必要な場合があります。
Excelで列ごとに並べ替えるには バイコル 引数をTRUEに設定します。 ソートインデックス は列ではなく行を表します。
例えば、以下のデータを数量が多いものから少ないものへと並べ替えるには、次の式を使用します。
=sort(b1:h2, 2, 1, true)
どこで
- B1:H2はソートする元データ
- 2はソートインデックスで、2行目の数字をソートしているので
- -1は降順のソート順
- TRUEは、行ではなく列をソートすることを意味します。
複数の列を異なる順序で並べ替える(多段階ソート)
複雑なデータモデルを扱う場合、複数レベルのソートが必要になることがよくあります。 それを数式で行うことができるでしょうか? ええ、簡単です!配列の定数を ソートインデックス と ソート順 の引数になります。
例えば、以下のデータを最初に次のようにソートする。 地域 (A列)のAからZまでで、その後に 数量 .(C列)の小さい方から順に、以下の引数を設定する。
- アレイ はA2:C13のデータです。
- ソートインデックス は配列定数 {1,3} であるため,最初に 地域 (1列目)であり、次に 数量 .です(3列目)。
- ソート順 は配列定数 {1,-1} であり、1列目は昇順、3列目は降順でソートされるからです。
- By_col が省略されているのは、行をソートするためで、これはデフォルトである。
議論をまとめると、こんな式になる。
=sort(a2:c13, {1,3}, {1,-1})
そして、完璧に動作します!最初の列のテキスト値はアルファベット順に、3番目の列の数値は大きいものから小さいものへとソートされています。
Excelでの並べ替えとフィルター
データを何らかの基準でフィルタリングし、出力を順番に並べたい場合は、SORT関数とFILTER関数を併用してください。
SORT(FILTER(配列, クライテリア・レンジ = クライテリア ), [sort_index], [sort_order], [by_col]).FILTER関数は、定義した条件に基づいて値の配列を取得し、その配列をSORTの第1引数に渡します。
この数式の最も優れた点は、Ctrl + Shift + Enterキーを押したり、コピーするセルの数を推測することなく、結果を動的な流出範囲として出力することです。 いつものように、一番上のセルに数式を入力し、Enterキーを押してください。
例として、A2:B9のソースデータから数量が30以上(>=30)の項目を抽出し、結果を昇順に並べることにします。
そのために、まず、下の画像のように、セルE2に条件を設定します。 そして、このようにExcelのSORT式を構築します。
=SORT(FILTER(A2:B9, B2:B9>=E2)), 2)
とは別に 勢揃い を指定するだけで、FILTER 関数によって生成された ソートインデックス 残りの2つの引数は、デフォルトで必要な動作(昇順、行ごとのソート)をするため、省略されています。
N個の最大値または最小値を取得し、その結果をソートする
膨大な量の情報を分析する場合、多くの場合、上位の値を一定数抽出する必要があります。 単に抽出するだけでなく、望ましい順序に並べたり、理想的には、結果に含める列を選択したりします。 厄介に感じますか? 新しい動的配列関数があれば大丈夫です。
以下は一般的な計算式です。
index(sort(...), sequence()) n ), { column1_to_return , column2_to_return , ...})どこ n は、返したい値の番号です。
以下のデータセットから、C列の数字に基づいたトップ3リストを取得したいとします。
これを実行させるには、まず配列A2:C13を3列目で降順にソートします。
ソート(a2:c13, 3, -1)
そして、上記の数式をネストして、最初の( 勢揃い ) を指定すると、配列は大きいものから小さいものへとソートされます。
2つ目の( 行番号 これは、数式中に縦配列定数 {1;2;3} を直接指定したのと同じです。
第3回目( col_num B列とC列を返したいので、配列{2,3}を使用します。}
最終的には、次のような式になる。
=index(sort(a2:c13, 3, -1), sequence(3), {2,3})
そして、それはまさに私たちが望む結果を生み出すのです。
戻るには 3底 の値の小さいものから順に並べるだけでよい。 ソート順 引数を -1 から 1 に変更する。
=index(sort(a2:c13, 3, 1), sequence(3), {2,3})
指定した位置でソートされた値を返す
例えば、ソートされたリストから1番目、2番目、3番目のレコードだけを返したい場合はどうすればよいでしょうか。 そのためには、上で説明したINDEX SORT式の単純化したものを使用すればよいのです。
index(sort(...)です。 n , { column1_to_return , column2_to_return , ...})どこ n は注目の位置です。
例えば、ある位置を上から順に(つまり、降順にソートされたデータから)取得する場合は、次の式を使用します。
=index(sort(a2:c13, 3, -1), f1, {2,3})
特定の位置を下から(つまり昇順にソートされたデータから)取得する場合は、こちらを使用します。
=index(sort(a2:c13, 3, 1), i1, {2,3})
ここで、A2:C13はソースデータ、F1は上からの位置、I1は下からの位置、{2,3}は返すべき列である。
Excelの表を利用して、ソート配列を自動的に展開させる
ご存知のように、ソートされた配列は元のデータに変更を加えると自動的に更新されます。 これは、SORT を含むすべての動的配列関数の標準的な動作です。 しかし、参照する配列の外側に新しい項目を追加しても、数式には自動的に含まれません。 このような変更に数式が対応するには、ソースレンジを完全な関数 Excel のテーブルを使用し、数式で構造化された参照を使用します。
実際にどのように機能するかは、以下の例でお考えください。
以下のExcelのSORT式を使って、範囲A2:B8内の値をアルファベット順に並べるとします。
=sort(a2:b8, 1, 1)
そして、9行目に新しいエントリーを入力...すると、新しく追加したエントリーが流出範囲から外れていることに気づき、ガッカリする。
このためには、列ヘッダー (A1:B8) を含む範囲を選択し、Ctrl + T キーを押します。 数式の作成時に、マウスを使ってソース範囲を選択すると、テーブル名が自動的に数式に挿入されます (これを構造化参照と呼びます)。
=SORT(Table1、1、1)
最後の行のすぐ下に新しい項目を入力すると、表は自動的に展開され、新しいデータはSORT式の流出範囲に含まれます。
ExcelのSORT関数が動作しない
SORT式の結果がエラーになる場合、以下の理由が考えられます。
#NAMEエラー:古いバージョンのExcel
SORTは新しい関数で、Excel 365とExcel 2021でのみ動作します。 この関数がサポートされていない古いバージョンでは、#NAME?エラーが発生します。
#SPILLエラー:何かが流出範囲をブロックしています
流出範囲の1つ以上のセルが完全に空白または結合されていない場合、#SPILL!エラーが表示されます。 修正するには、詰まりを取り除くだけです。 詳細は、Excel #SPILL!エラー - その意味と修正方法 を参照してください。
#VALUEエラー:無効な引数
VALUE!エラーが発生した場合は、必ず ソートインデックス と ソート順 の引数になります。 ソートインデックス は、列の数を超えてはいけません。 勢揃い そして ソート順 は1(昇順)または-1(降順)でなければならない。
#REF エラー: ソースワークブックが閉じられました。
動的配列はワークブック間の参照に制限があるため、SORT関数は両方のファイルを開く必要があります。 ソースワークブックが閉じている場合、数式は#REF!エラーを投げます。 これを解決するには、参照されているファイルを開きます。
以上、Excelで数式を使ってデータを並べ替える方法でした。 読んでくださってありがとうございました!来週のブログでお会いしましょう。
練習用ワークブック(ダウンロード
Excelで数式を使った並べ替え(.xlsxファイル)