Googleのスプレッドシートの便利な数式queryの中で、order byを使って別のシートから指定した範囲を抜き出しソートを掛けたときに、descはきちんと表示されるのに、数式の中をascに変えたとたんに表示されない、、、という事態に陥りました。
その原因と解決方についてまとめています。
原因
ascだけが機能せず、表示がおかしくなる原因は空白行が含まれているからでした。
ascで昇順に並べ替えたときに、指定範囲内に空白が含まれる場合、空白が一番上にきます。一方、descで降順に並べ替えたときは、空白行が下にいくので、データがきちんと整列してあるように見えます。
つまり、ascもdesc同様にきちんと機能しているということです。
症状
descの場合
例えば、次の数式のように、importrangeを使って他の行を読み込んだ場合に「実施日」でソートを行います。
=query(importrange(シートID, 範囲), select * order by Col15 desc)
query関数の中で「where句」や「order by句」を使うときの行の指定は通常はAなどの列のアルファベットを使います。
importrangeで他のシートから読み込んだときは、列のアルファベットでは機能しません。代わりに、読み込んだときの列番号を指定します。(上記の例では col15
)
descの場合は以下のようにしっかりと指定した15行目の「●実施日」でソートが行われます。

*データ抽出用なので、書式設定はしていません。
ascの場合
数式の末尾を「asc」に入れ替えてみます。
=query(importrange(シートID, 範囲), select * where Col15 is not null order by Col15 asc)
すると、何も表示されなくなりました(ように見えるだけ)

これは、指定した範囲内に空白が含まれているため、空白行が上に来ているだけです。
実際に下の方にスクロールしてみると、きちんとascでソートされたデータがあります。

空白行が1000行ぐらい含まれていたので、気づくのが遅れました。。w
対処法
対処はとても簡単です。ソートしたい行の空白行を除外して呼び出せばOKです。where句を使って、以下の指示を追記します。
where ソート対象の列 is not null
これで、指定した行の空白行は除外する指示になります。
実際の記述は以下のようになります。
=query(importrange(シートID, 範囲), select * where Col15 is not null order by Col15 asc)
きちんと指定した行で昇順ソートされたデータが表示されました。

descはきちんと機能するのに、ascが機能しない!Googleのサーバーエラーか何か!?と思った方は、ぜひ下の方にスクロールして確認してみてください。
よきプログラミングDAYを!