クエリのレコードを独自の順序で並べ替える

[Access 2016/2013/2010]

クエリのレコードを、「昇順」や「降順」ではなく、自分で決めた特定の順序で並べ替えたいことがあります。

図1のテーブルを見てください。「顧客名」「ランク」などの顧客情報が入力されたテーブルです。このテーブルからクエリを作成して、図2のように「SS、S、A、B」のランク順に並べ替えたいときに、[昇順]や[降順]の並べ替えを設定しても目的の順序にはなりません。自分で決めた順序で並べ替えるには、その並び順を何らかの方法で定義する必要があります。

今回、並べ替えの基準となるのは「SS」「S」「A」「B」の4項目ですが、このように項目数が少ない場合は、Switch関数を使用して手軽に並び順を定義できます。ここでは、その方法を紹介します。

図1 このテーブルから[顧客ID][顧客名][ランク]データを抜き出して…(→図2へ)。

図2 「SS、S、A、B」の順に並べ替えたい。

なお、並べ替えの基準となる項目数が多い場合は、テーブルを使用して並び順を定義するほうがよいでしょう。詳しくは、「クエリのレコードを都道府県の地理順に並べ替える」を参照してください。

スポンサーリンク

【予備知識】Switch関数を使用してランクの並び方を定義する

Switch関数を使用すると、複数の項目に番号付けを行えます。

構文 Trueの式に対応する値を返す
Switch(式1, 値1, 式2, 値2 …, 式n, 値n)

ここでは、昇順で並べ替えたときに「SS、S、A、B」の順に並ぶように、「SS」に「1」、「S」に「2」、「A」に「3」、「B」に「4」という番号を振ることにします。それには、Switch関数を使用して、

  • [ランク]フィールドの値が「SS」の場合は「1」を返す
  • [ランク]フィールドの値が「S」の場合は「2」を返す
  • [ランク]フィールドの値が「A」の場合は「3」を返す
  • [ランク]フィールドの値が「B」の場合は「4」を返す

という式を作成します。

入力式 「SS」に「1」、「S」に「2」、「A」に「3」、「B」に「4」という番号を振る
Switch([ランク]="SS",1,[ランク]="S",2,[ランク]="A",3,[ランク]="B",4)

【操作手順】クエリを作成して並べ替えを定義する

具体的な手順を見ていきましょう。

クエリを作成して、テーブルから必要なフィールドを追加したら、一番右の[フィールド]欄にSwitch関数の式を入力します(図3)。入力した式の前に「式1:」などの仮のフィールド名が自動で付加されますが、そのままでかまいません。続いて、[昇順]の並べ替えを設定します。

図3
1)クエリを新規作成して、データ元のテーブルを追加する。
2)必要なフィールドを追加する。
3)最右列の[フィールド]欄にSwitch関数の式を入力する。
4)[並べ替え]欄で[昇順]を選択する。

いったん、データシートビューに切り替えて、クエリの様子を確認してみましょう(図4)。レコードがSwitch関数の戻り値の昇順に並べ替えられ、結果として「SS、S、A、B」の順に並びます。

図4
5)レコードがSwitch関数の戻り値の昇順に並んだ。
6)結果として「SS、S、A、B」の順に並んだ。

「式1」フィールドはデータシートに表示する必要がないフィールドなので、非表示にしましょう。クエリをデザインビューに切り替え、[式1]フィールドの[表示]のチェックを外します(図5)。

図5
7)[式1]フィールドの[表示]のチェックを外す。

すると、冒頭の図2のように、[式1]フィールドが非表示になります。

メモ

同じランクの中では顧客ID順に並べる方法
今回のクエリでは「A」ランクと「B」ランクに複数のレコードが存在しますが、同じランク内で[顧客ID]順に表示するには、[式1]フィールドの右にもう一つ[顧客ID]フィールドを追加して、[並べ替え]欄で[昇順]を指定し、[表示]のチェックを外します。
複数のフィールドで並べ替えを指定した場合、左の列の並べ替えが優先されるので、[ランク]の高い順(Switch関数の結果の小さい順)に並べ替えが行われ、同じランクの中では[顧客ID]の小さい順に並べ替えられます。
スポンサーリンク

関連記事