見出し画像

麻雀データ管理(初級編)Vol.5

こんにちは。
今回は集計表をもとにquery関数を使ってトータルポイント順に並べ替える方法を解説したいと思います。

1.query関数とは

query関数とはエクセルには無いGoogleSpreadsheet独自の関数で、数式をひとつのセルに入力するだけで元データから様々な条件を指定して欲しいデータを抽出できる神関数です。
私がエクセルではなくGoogleSpreadsheetを使っている最大の要因はこのquery関数があるからです。

query関数の構文は「=QUERY(範囲, クエリ, [見出し])」となり
第1引数は元データの範囲
第2引数のクエリとはGoogle Visualization API のクエリ言語を使用して抽出するデータの条件を指定します。
第3引数の見出しはデータの上部にある見出しの行数を指定しますが省略可能です。

この関数はほんとにいろんなことが出来て全部説明しているとキリがないので、query関数について解説されているYouTubeチャンネルのリンクをこの記事の一番下に貼っておきますね。
今回は並び替え手順の紹介だけをやっていきます。

2.query関数を使ってトータルポイント順に並べ替え

まずは前回と同じように集計表の隣にトータルポイントランキングの表を用意します。今回は項目の欄もDeleteキーで消しておきましょう。

N2セルに「=QUERY(B2:L,"select * order by D desc",1)」と入力すれば一発でトータルポイント順に並べ替えが出来ます。参加人数が増えた場合でも自動で対応出来ます。

数式内の「B3:L」は元データの範囲、「select *」は範囲の全部の列を選択するという意味で全選択の場合は省略可能で
=QUERY(B2:L,"order by D desc",1)」としても同じ結果が得られます。
この「select *」の部分を例えば「select B,D,F」と変更し
=QUERY(B2:L,"select B,D,F order by D desc",1)」とすると

B,D,F列の「名前」「トータルポイント」「平均着順」だけが抽出されます。
表示形式までは変わりませんのでその都度整えてください。

※注
この時に指定する列番号は必ず半角大文字で入力しカンマで区切ってください。
列の指定に「BY」を指定するとエラーが出てしまうので、その場合は「"BY"」とダブルクオーテーションで囲ってあげるといいです。
(他にもエラーになってしまう列番号があるかもしれません)

次の数式内の「order by D」と言うのはD列を基準に並び替えるという意味で、そのあとの「desc」というのは降順にという意味になります。
昇順に並び替えをする場合は「asc」と入力してください。
この時も列番号Dは必ず半角大文字で入力します。

第2引数の「クエリ」部分は必ずダブルクオーテーションで囲ってください。

数式最後の「1」は項目(見出し)の行数なので今回は1となります。

3.query関数使用時の注意点

ここで私が普段query関数を使っていて、ここだけは注意しなきゃいけないなと感じる一例を紹介したいと思います。
下の画像は先程作った「集計表」シートで右のトータルポイントランキングの表はquery関数を使って並べ替えをしてあります。
ここで仮に集計表の名前と対局数の列の間に選手№の項目を追加するために1列追加してみます。

1列追加すると下の画像のようになります。

query関数が入っているトータルポイントランキングの表を見ると参照範囲は追加した1列分も自動で広がっていて、表示形式と罫線だけ整えれば良いように見えますが、よく見ると並び替えが対局数順になっています。
ここでquery関数が入っているセルの数式を見てみると

=QUERY(B2:M,"select * order by D desc",1)となっており、第1引数は「B2:M」となっていて挿入した1列分増えていますが、第2引数「order by D」のところは先程作った数式のままになっています。
これはどういうことかというと、普通の関数内に入っているセル範囲は、範囲内に列や行を挿入すると自動で拡張されますが、query関数の第2引数のクエリ内に書き込まれた列番号は数式を入力した時のままで固定となります。
ですからquery関数で参照している元データに列を挿入した場合は数式を書き換える必要があるということになります。
(今回の場合は「order by D」を「order by E」に書き換えなければならない)

では今回はこのへんで。
次回はsort関数による並び替えの応用編をやっていきたいと思います。

query関数を解説しているYouTubeチャンネル


この記事が気に入ったらサポートをしてみませんか?