目次
本日は、新しい動的配列SORTBY関数の構文と典型的な使用方法を詳しく説明します。 Excelで数式を使ったカスタムソートやリストのランダムソート、テキストの長さでセルを並べる方法などを学びます。
Microsoft Excel では、テキストデータをアルファベット順に並べたり、日付を時系列に並べたり、数字を小さい順や大きい順に並べたりすることができます。 また、独自のリストで並べ替えることもできます。 Excel 365 では、従来のソートに加えて、新たに数式でデータを並べる方法が導入され、非常に便利で使いやすくなっています。
エクセル SORTBY関数
ExcelのSORTBY関数は、ある範囲または配列を、別の範囲または配列の値に基づいて並べ替えるために設計されています。 並べ替えは、1列または複数の列で行うことができます。
SORTBYは、Excel for Microsoft 365とExcel 2021で利用できる6つの新しい動的配列関数のうちの1つです。 その結果は、隣接するセルに波及し、ソースデータが変更されると自動的に更新される動的配列です。
SORTBY関数の引数は可変で、最初の2つは必須、その他は任意である。
SORTBY(array, by_array1, [sort_order1], [by_array2, sort_order2],...)アレイ (必須) - 並べ替えの対象となるセルの範囲、または値の配列。
By_array1 (必須) - 並べ替えの対象となる範囲または配列。
ソート順1 (オプション) - 並べ替えの順序。
- 1 または省略(デフォルト) - 昇順
- -1 - 降順
By_array2 / ソート順2 , ... (オプション) - 並べ替えに使用する追加の配列/順序のペア。
重要!現在、SORTBY機能はMicrosoft 365サブスクリプションとExcel 2021でのみ利用可能です。 Excel 2019、Excel 2016およびそれ以前のバージョンでは、SORTBY機能は利用できません。
SORTBY機能 - 4つの注意点
Excel の SORTBY 式を正しく動作させるためには、いくつかの重要なポイントがあります。
- By_array の引数は、1行または1列の幅でなければなりません。
- があります。 勢揃い とか by_array(バイアレイ 引数は互換性のある次元でなければならない。 例えば、2つの列でソートする場合。 勢揃い , by_array1(バイアレイ と by_array2(バイアレイ2 は同じ行数でなければなりません。そうでない場合は #VALUE エラーが発生します。
- SORTBYが返す配列が最終結果(セルに出力され、他の関数に渡されない)である場合、Excelは動的な流出範囲を作成し、そこに結果を入力します。 ですから、式を入力するセルの下または右に十分な空きセルがあることを確認してください。そうしないと、#SPILLエラーが発生します。
- SORTBY式の結果は、ソースデータが変更されるたびに自動的に更新されます。 しかし、式で参照される配列の外側に追加された新しい項目は、SORTBY式を更新しない限り結果に含まれません。 勢揃い 参照される配列が自動的に展開されるようにするには、参照元の範囲をExcelのテーブルに変換するか、動的な名前付き範囲を作成します。
Excelの基本的なSORTBYの計算式
ExcelでSORTBYの数式を使う場合の典型的なシナリオを紹介します。
を持つプロジェクトのリストがあるとします。 価値 他のユーザーが数字を見る必要がないため、"プロジェクト "フィールドを含めずに、別のシートでプロジェクトの値で並べ替えたい。 価値 の列が表示されます。
この作業は、SORTBY関数を使って簡単に行うことができる。SORTBY関数には、次のような引数を与える。
- アレイ はA2:A10です。 価値 カラムを結果に表示させたい場合は、配列から除外します。
- By_array1 はB2:B10 - でソート 価値 .
- ソート順1 は-1 - 降順,つまり高いところから低いところへ。
議論をまとめると、こんな式になる。
=sortby(a2:b10, b2:b10, -1)
簡単のために、同じシート上のD2に数式を入力してEnterキーを押すと、必要な数のセル(この例ではD2:D10)に自動的に結果が「こぼれる」。 しかし厳密には、数式は最初のセルにしかないので、D2から削除すると結果がすべて削除される。
別のシートで使用する場合、数式は次のような形になります。
=SORTBY(Sheet1!A2:A10, Sheet1!B2:B10, -1)
どこ シート1 は元データの入ったワークシートです。
ExcelでSORTBY関数を使用する - 計算式の例
以下に、SORTBY の使用例を示しますので、参考にしてください。
複数の列でソートする
上記の基本的な数式は、データを1つの列でソートするものです。 しかし、もう1段階ソートを追加する必要がある場合はどうしたらよいのでしょうか。
サンプルのテーブルには2つのフィールドがあると仮定します。 ステータス (B列)と 値(C欄) でまずソートしたい。 ステータス アルファベット順に、そして 価値 を下降させる。
2つの列で並べ替えるには、もう1組の by_array(バイアレイ / ソート順 の引数になります。
- アレイ はA2:C10です。今回は、3つの列すべてを結果に含めたいのです。
- By_array1 はB2:B10 - 最初でソート ステータス .
- ソート順1 は1 - AからZまでアルファベット順に並べます。
- By_array2 が C2:C10 - であれば、ソートしてください。 価値 .
- ソート順2 は-1 - 最大から最小の順にソートします。
その結果、以下の式が得られます。
=sortby(a2:b10, b2:b10, 1, c2:c10, -1)
これは、私たちが指示したとおりにデータを並べ替えたものです。
Excelで数式を使ったカスタムソート
データを独自の順序で並べ替えるには、Excelのカスタムソート機能を使うか、このようにSORTBY MATCHの数式を作る方法があります。
SORTBY(配列, MATCH() range_to_sort , カスタムリスト , 0))このデータセットをよく見てみると、プロジェクトをアルファベット順ではなく、重要度順など「論理的」にソートした方が便利なことがわかるだろう。
これを実現するために、まず、希望のソート順でカスタムリストを作成します( 進行中 , 完成品 , 保留中 ) E2:E4 の範囲にある別のセルにそれぞれの値を入力する。
そして、上記の汎用式を使って、ソースレンジを供給し 勢揃い (A2:C10)の場合は ステータス かしらも range_to_sort (B2:B10)のために作成したカスタムリストと カスタムリスト (E2:E4)。
=sortby(a2:c10, match(b2:b10, e2:e4, 0))
その結果、プロジェクトをステータスごとに正確に分類できるようになりました。
カスタムリストで逆順にソートするには、-1 を置きます。 sort_order1 の議論になります。
=sortby(a2:c10, match(b2:b10, e2:e4, 0), -1)
そして、プロジェクトの仕分けを逆にしてもらう。
各ステータス内でさらにレコードをソートしたい場合は、数式にもう1つソートレベルを追加します。 価値 (C2:C10)とし、ソートの順序を定義する。この例では昇順とする。
=sortby(a2:c10, match(b2:b10, e2:e5, 0), 1, c2:c10, 1)
Excelのカスタムソート機能と比較して、SORTBY式の大きな利点は、元のデータが変更されるたびに自動的に更新されることです。
この処方の仕組み
既に述べたように、Excel の SORTBY 関数は、元配列と同じ次元の "sort by" 配列しか処理できません。 元配列 (C2:C10) は 9 行、カスタムリスト (E2:E4) は 3 行しかないので、この配列を直接 by_array(バイアレイ その代わり、MATCH 関数で 9 行の配列を作成します。
マッチ(b2:b10, e2:e5, 0)
ここでは ステータス 列 (B2:B10) をルックアップ値として、カスタムリスト (E2:E5) をルックアップ配列として使用します。 最後の引数は完全一致を探すために 0 に設定します。 その結果、9 つの数値からなる配列が得られ、それぞれが指定された ステータス の値をカスタムリストに追加します。
{1;3;2;1;3;2;2;1;2}
この配列は、直接 by_array(バイアレイ の引数を取り,配列の要素に対応する順序でデータを配置するよう強制します。つまり,最初に1で表されるエントリ,次に2で表されるエントリ,という順序でデータを配置します。
Excelで数式を使ったランダムソート
Excelの以前のバージョンでは、このチュートリアルで説明されているように、RAND関数でランダムに並べ替えることができます:Excelでリストをランダムに並べ替える方法。
新しいExcelでは、SORTBYと一緒に、より強力なRANDARRAY関数が使用できます。
SORTBY(ソートバイ) 勢揃い , randarray(rows( 勢揃い )))どこ 勢揃い はシャッフルしたいソースデータです。
この一般的な数式は、1列からなるリストにも、複数列からなる範囲にも適用できます。
例えば、A2:A10 のリストをランダムに並べ替えるには、次の式を使用します。
=sortby(a2:a10, randarray(rows(a2:a10)))
A2:C10のデータを行をそろえてシャッフルする場合は、こちらを使用します。
=sortby(a2:c10, randarray(rows(a2:c10)))
この処方の仕組み
RANDARRAY関数は、ソートに使用する乱数の配列を生成し、その配列を by_array(バイアレイ 生成する乱数の個数を指定するには、ROWS関数で生成元の範囲の行数を数え、その個数をSORTBYの 漕ぎ手 ランダレイの議論 それだ!
注意:RANDARRAYは前任者と同様、揮発性の関数で、ワークシートが再計算されるたびに新しい乱数の配列を生成します。 その結果、シートが変更されるたびにデータがリゾートされます。 自動リゾートを防ぐためには ペースト・スペシャル > 価値観 機能により、数式をその値に置き換えることができます。
セルを文字列の長さでソートする
セルに含まれる文字列の長さでソートするには、LEN関数を使って各セルの文字数を数え、計算した長さを by_array(バイアレイ は、SORTBYの引数です。 ソート順 引数は、望ましいソート順に応じて、1 または -1 のいずれかに設定することができる。
文字列を小さいものから順に並べ替えたい場合。
SORTBY(配列, LEN(配列), 1)文字列の大きいものから小さいものへ並べ替える。
SORTBY(配列, LEN(配列), -1)そして、このアプローチを実際のデータで実証したのが、こちらの数式です。
=sortby(a2:a7, len(a2:a7), 1)
A2:A7は、テキストの長さで昇順に並べ替えたい元のセルです。
SORTBYとSORTの比較
Excelの新しい動的配列関数の中で、ソート用に設計されたものが2つあります。 以下に、最も重要な違いと類似点、およびそれぞれをどのように使用するのが最適かを列挙します。
- SORT 関数とは異なり、SORTBY は "sort by" 配列が入力配列の一部である必要はなく、また結果にも現れる必要はありません。 したがって、別の独立した配列や独自のリストに基づいて範囲をソートする場合は、SORTBY 関数が適しています。 もし、それ自身の値に基づいて範囲をソートしたい場合は SORT がより適切と言えます。
- どちらの関数も複数レベルのソートをサポートしており、他の動的配列関数や従来の関数と連鎖させることができます。
- いずれの機能も、Excel 365とExcel 2021のユーザーのみが利用可能です。
ExcelのSORTBY関数が機能しない
SORTBY式がエラーを返す場合、次のいずれかの原因が考えられます。
無効なby_array引数
があります。 by_array(バイアレイ の引数は1行または1列でなければならず、そのサイズは 勢揃い 引数で指定します。 勢揃い は10行です。 by_array(バイアレイ は10行を含む必要があります。 そうでない場合は、#VALUE!
無効な sort_order 引数
があります。 ソート順 引数は1(昇順)または-1(降順)のみです。 値を設定しない場合、SORTBYのデフォルトは昇順です。 それ以外の値を設定した場合、#VALUE!エラーが返されます。
結果を出すための十分なスペースがない
他の動的配列関数と同様に、SORTBYは自動的にサイズ変更と更新が可能な範囲に結果をこぼします。 すべての値を表示するのに十分な空のセルがない場合、#SPILL!エラーがスローされます。
ソースワークブックが閉じている
SORTBY式が他のExcelファイルを参照する場合、両方のワークブックが開いている必要があります。 参照元のワークブックが閉じている場合、#REF!エラーが発生します。
お使いのExcelのバージョンは動的配列をサポートしていません。
ダイナミックバージョン以前のExcelで使用した場合、SORT関数は#NAME?エラーを返します。
以上、エクセルでSORTBY関数を使ってカスタムソートなどをする方法でした。 読んでいただきありがとうございました!来週のブログもよろしくお願いします。
練習用ワークブック(ダウンロード
Excel SORTBYの計算式(.xlsxファイル)