いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

(Gスプレッドシート)リストの空白を詰める

 Googleスプレッドシートで関数を使い、縦に並んだデータの中の空白セルを除いて上方向に詰める方法についてです。

  • FILTER関数またはQUERY関数を使ってリスト中の空白を詰めることができます。

手順

FILTER関数による方法

f:id:accs2014:20200102222308p:plain:right:w500

 いきなり結果ですが、まずB2:B11の範囲がリストになっています。
 これに対してD2に次のように入力しています。

=FILTER(B2:B11,B2:B11<>"")

 第2引数に抽出条件として「(B列の)値が空白でないこと」を設定することで、空白を詰めた結果を得ています。
 

f:id:accs2014:20200102222313p:plain:right:w650

 また、このようにリストが2列以上になっている場合も対応可能です。
 リストの範囲はB2:C11で、これに対しD2セルには次のように入力しています。

=FILTER(B2:C11,B2:B11<>"",C2:C11<>"")

 FILTER関数では条件を第3引数、第4引数……にも設定することで増やしていくことができますので(AND条件になります)、このようにして「2つの列が両方とも空白でない」という抽出条件を設定しています。

QUERY関数による方法

f:id:accs2014:20200102222317p:plain:right:w500

 こちらもいきなり結果からです。
 B2:B11のリストに対し、D2に次のように入力しています。

=QUERY(B2:B11,"WHERE B<>''")

 条件の記し方がFILTER関数と異なりますが、これで「(B列の)値が空白でない」という条件になっています。
 QUERY関数は条件の記し方が独特でFILTER関数やSORT関数などと比べて難しい印象がありますが、さまざまな句を盛り込むことで多数の関数を兼ねたような効果が得られますのでとても便利です。
 

f:id:accs2014:20200102222321p:plain:right:w650

 QUERY関数も複数の列に対応可能ですが、条件の記し方がやはり異なります。
 D2には次のように記しています。

=QUERY(B2:C11,"WHERE B<>'' AND C<>''")

 条件となる引数は1つですが(第2引数のみ)、このように条件をANDでつなぐことで複数の条件を課すことができます。
 ANDをORに替えることで簡単にOR条件(少なくとも片方の列が空白でない)に変えることもできます。