いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)本当に使える便利な関数15選

 Googleスプレッドシートで用意されているさまざまな関数のうち、ぜひ試していただきたいおすすめの関数を紹介します。機能の派手さや面白さよりも実用的な価値を優先し、長く使えるものを厳選しています
 ただし表計算ソフトの経験をある程度お持ちの方を想定しており、SUMやIFのようなごく基本的なものは除いています。また、構文の詳細については省略していますので、詳しくは公式解説等をご覧ください。

  • GoogleスプレッドシートにはExcelでもおなじみの関数のほか、オリジナルの便利な関数が多数用意されています。

手順

SPLIT関数…区切り文字により文字列を分割する

 文字列中の、区切り文字により区切られた複数の部分を複数のセルに分割して出力します。
 典型的な利用例としては、カンマ区切りされた文字列から複数の値を取り出すというものが挙げられます。

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

 画像ではB3セルに記録された文字列について、カンマを区切り文字とみなして分割しています。

 D3セルに入力されている式は次の通りです。

=SPLIT(B3,",")

 記述が簡単で、さらにINDEX関数と組み合わせることで○番目の値を取り出すといったこともできとても便利です。
 惜しいのは「単に1文字ずつ分割する」ということができないことで、これをやろうとすると別のアプローチをとらなければならず案外面倒です。

 なお、応用例として次のような記事があります。

www.officeisyours.com


CONCATENATE関数…文字列を結合する

 複数の文字列を結合して1つの文字列にすることができます。

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

 画像ではB3:D3の範囲に記録された文字列を連結しています。

 F3セルに入力されている式は次の通りです。

=CONCATENATE(B3:D3)

 若干関数名が長いのが気になりますが、これも多用する関数です。
 なお名前が似ているCONCAT関数はほとんど使えない(2つの文字列を結合することしかできない)関数ですので注意が必要です。

JOIN関数…文字列を区切り文字付きで結合する

 複数の文字列を結合するとともに、区切り文字を加えることができます。

f:id:accs2014:20200505152213p:plain:right:w550

 画像ではB3:B5の範囲にある文字列を結合するとともに、それぞれの文字列の間にカンマを挿んでいます。

 F3セルに入力されている式は次の通りです。

=JOIN(",",B3:B5)

 関数名も短くて使いやすい関数です。
 ただし、第2引数(結合する範囲)として縦1列あるいは横1行の範囲しか指定できないという謎の制約があります。

TEXTJOIN関数…文字列を区切り文字付きで結合する

 文字列結合系の関数の最強版です。区切り文字を加えられるほか、空白セルを無視する(結果的に区切り文字が連続しない)設定もできます。

f:id:accs2014:20200505152217p:plain:right:w550

 画像では、B3:B6の範囲にある文字列を結合するとともにそれぞれの文字列の間にカンマを挿み、さらに空白セル(B5)については結合の対象外とみなし余分なカンマを加えないようにしています。

 D3セルに入力されている式は次の通りです。

=TEXTJOIN(",",TRUE,B3:B6)

 文字列結合に関する他の関数の機能をすべて兼ね備えた関数ですので、文字列を結合するときに迷ったらこれを使えば間違いありません(区切り文字として空文字列を指定すれば単純な結合もできます)。
 ただし引数が多くなるため、入力が若干面倒です。

 なお、次の記事で文字列結合に用いる4種の関数の機能比較を行っています。

www.officeisyours.com

REGEXEXTRACT関数…正規表現にマッチする文字列を抽出する

 文字列中の、正規表現(ワイルドカードの大幅拡張版とお考え下さい)にマッチする部分を1つ(最初にマッチした部分)抽出します。
 文字列抽出の問題をほとんど解決できる超強力な関数です。

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

 画像では、B3セルの文字列から、1文字以上の連続する数字を取り出しています。
 細かい話になりますが、上記の説明にあるようにREGEXEXTRACTが抽出するのは1つの部分だけで、この例でも抽出しているのは1つの「連続する数字」です。よって数字が飛び飛びに表れる場合には、この式ですべての数字を抽出することはできません。

 D3セルに入力されている式は次の通りです。

=REGEXEXTRACT(B3,"[0-9]+")

 従来のLEFT,RIGHT,MID関数による文字列の抽出は文字の位置情報(○文字目)を介するため式が複雑になりやすい難点がありましたが、REGEXEXTRACT関数では抽出したい文字列の構成を表現できさえすれば直接結果が得られるのがポイントです。
 一方でネックなのは正規表現自体の難易度の高さで、特に「意図した文字列のほか、意図しない文字列をも拾ってしまう」ということが多く、回避が容易でないこと(正規表現あるあるです)が挙げられます。
 また、使える正規表現はかなり制限されていますので、本格的な学習に用いるには少々中途半端な印象があります。

 なお、次の記事でREGEXEXTRACT関数のさまざまな使い方を紹介しています。

www.officeisyours.com

 また、数字の抽出については次の記事で例を紹介しています。

www.officeisyours.com

REGEXREPLACE関数…正規表現にマッチする文字列を置き換える

 文字列中の、正規表現にマッチする部分のすべてを指定した文字列に置き換えます。置換先を空文字にすることで結果的に文字列抽出に用いられることもあります。
 文字列置換の問題をほとんど解決できる超強力な関数です。

f:id:accs2014:20200505152227p:plain:right:w550

 画像では、B3セルの文字列内のすべての数字をアスタリスク(*)に置き換えて伏せています。
 なお、REGEXREPLACEはマッチする部分をすべて置き換えますので、数字が飛び飛びに表れる場合でも、この式ですべての数字を置き換えることができます。

 D3セルに入力されている式は次の通りです。

=REGEXREPLACE(B3,"[0-9]","*")

 
 REGEXEXTRACTと同様のデメリットがありますが、あまりに効果的なため一度使うと手放せなくなる関数です。
 応用例としては次の記事が挙げられます。

www.officeisyours.com

SEQUENCE関数…連番を出力する

 1,2,3…といった数値の並びを出力する関数です。初項(最初の数字)、増分(○ずつふえる)の設定が可能で、さらに行列状に出力することも可能です。
 かつて連番の出力はROW関数などで代用されていましたが、表参照に依存する(よって行の追加・削除と共に値が崩れる可能性がある)というデメリットがありました。しかしSEQUENCE関数はこうしたデメリットがありません。

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

 画像では3行4列にわたり、1から12までの連番を表示しています。

 B2セルに入力されている式は次の通りです。

=SEQUENCE(3,4,1,1)

 
 そして実は連番そのものよりも他の関数と組み合わせて一種のループ処理ができるのがこの関数のキモです。応用については以下の記事で触れています。

www.officeisyours.com

BASE関数…n進数に変換し文字列化する

 数値をn進数(n=2~36)に変換し、任意の桁数でゼロ埋めすることができます。
 事務的な用途での使用頻度は低いかもしれませんが、合致する用途があるときはこの上なくありがたい関数です。縁の下の力持ち的な存在です。

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

 画像ではB3セルに記された数値を2進数に変換して8桁のゼロ埋めを行っています。

 D3セルに入力されている式は次の通りです。

=BASE(B3,2,8)

 変換内容を非常に簡潔に記述できるのがメリットです。

ARRAYFORMULA関数…他の関数の引数として配列を与える

 他の関数や数式と併用することで効果を現す関数です。
 通常は単一の値しか引数にできない各種の関数(IF関数など大多数の関数)の引数に配列を与えることができ、結果的に複数の戻り値を一括して取得することができます。

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

 画像ではB3:B5の範囲に記録された数値をすべて評価し、それぞれ70以上なら「合格」、70点未満なら「不合格」と表示しています。

 D3セルに入力されている式は次の通りです。

=ARRAYFORMULA(IF(B3:B5>=70,"合格","不合格"))

 Googleスプレッドシートの看板ともいえる関数で実際便利ではありますが、そもそも引数が配列のときには配列を返せばよいだけの話にも思え、関数としての存在に疑問がなくもありません(有効な使い分けを私が知らないだけかもしれませんが)。実際に後発のExcelでは関数の引数として配列を直接与えることができ、ARRAYFORMULAのような関数を伴う必要はありません。
 また、併用できない関数が案外多いのもちょっと残念なところです。

SUMIF関数…条件にマッチする数値の合計値を求める

 条件にあう数値のみを合計することができます。条件を設定する配列と集計対象とする配列を別々に設定できるのがポイントです。ゆえに若干複雑でもあり、表計算初心者にとってのちょっとした関門です。

f:id:accs2014:20200505152242p:plain:right:w550

 画像ではB3:C6の範囲のデータに基づき、「白組」の点数の合計を求めています。

 E3セルに入力されている式は次の通りです。

=SUMIF(B3:B6,"白組",C3:C6)

 第1引数(条件設定の対象)と第3引数(集計対象)2つの範囲がそれぞれ対応付けられるのがポイントで(よってどちらも同じ長さ(セルの数)でなければならない)、そこが若干難しい点でもあります。

 特徴的なのは第1引数に関数が使えることで(こうした仕様はSUMIF関数に限らずGoogleスプレッドシートのアドバンテージです)、これにより応用範囲が広がっています。
 具体的な応用例として次のようなものがあります。

www.officeisyours.com

UNIQUE関数…重複するレコードを1つにまとめる

 表のレコード(行)のうち重複するものを1つにまとめた結果を得ることができます。

f:id:accs2014:20200505152247p:plain:w700

 画像ではB3:C12の範囲のデータについて、「種類」と「産地」の両方がだぶっているレコードを1つにまとめています。
 「トマト」「群馬県」と「じゃがいも」「北海道」のレコードがそれぞれ2つずつありますので、右側の出力結果では2つのレコードが減らされてレコード数が10から8に減少しているのがわかります。
 種類の「なす」や「ねぎ」、産地の「長野県」なども複数回現れますが、両方が重複しない限り「重複する行」とはみなされないのでこれらのレコードはそのままになっています(3列以上ある場合もすべての値が重複していなければ「重複する行」にはなりません)。

 E3セルに入力されている式は次の通りです。

=UNIQUE(B3:C12)

 これも記述が簡単で効果は絶大、なんといっても表から表を取り出すという(発表当時としては)画期的な関数で、これを使いたくてGoogleスプレッドシートを試してみたという方も多いと思います。

FILTER関数…条件にマッチするレコードを抽出する

 表のうち条件にマッチするレコードを抽出します。

f:id:accs2014:20200505152251p:plain:w700

 画像ではB3:D7の範囲のデータから、D列の値が170以上であるレコードを抽出しています。

=FILTER(B3:D7,D3:D7>=170)

 これも効果的な関数ですが、対象が1列の場合でも範囲を2回記述しなければならないため、内容によっては式が妙に長くなってしまう場合があります。

 なお、FILTER関数には列をレコードとみなしてデータを抽出することができるというちょっとした特長があります。
 次の記事で具体的な例を紹介しています。

www.officeisyours.com

QUERY関数…抽出列の選択、レコードの抽出条件設定、並べ替え等を一括して行いレコードを抽出する

 対象となる表から抽出する列の選択、レコード(行)抽出条件条件の設定、グループ化集計などを一括して行うことができます。データ操作における最も強力な関数です。
 各種条件を1つの文字列にまとめて指定することができますが、SQL(データベース用のデータ操作言語)に近い内容となっており、中・上級者向けの関数と言えます。

f:id:accs2014:20200505152257p:plain:w700

 画像ではB3:D7の範囲のデータから、B,D列の値を抽出しています。ただし、C列の値が「白組」であるレコードだけを対象とし、さらにD列の値の降順で並べ替えています。

=QUERY(B3:D7,"SELECT B,D WHERE C='白組' ORDER BY D DESC")

 複雑な抽出でも関数が1個で済むため、どの関数を使うか悩む必要がないのがメリットです。また、各種条件を1つの文字列として指定できるため、ユーザーに抽出条件を入力させて必要な文字列をリアルタイムで生成するような(Accessのクエリデザイナのようなイメージ)高度な使い方も可能です。
 一方、文字列内の句の記述の順序など制約が大きく、さらにSQLに似せている割には記述に独特な部分が多いため習得が難しいのが難点です。列の指定を列記号(A,B,C…。シート上の表の場合)か列番号(Col1,Col2…。計算過程における表の場合)でしか行えないのも気になるところです。

TRANSPOSE関数…行列を転置する

 表の縦横を入れ替えた結果を返します。メニュー操作でも実現できますが、関数でリアルタイムに結果を更新できるのはやはり大きいポイントです。

f:id:accs2014:20200505152301p:plain:w750

 画像ではB2:E4の表(データが増えると右側に伸びる形式になっています)の縦横を入れ替え、下方に伸びていく形式に改めています。

=TRANSPOSE(B2:E4)

 使い方は簡単で唯一無二の効果が得られる関数です。
 FILTER関数などと組み合わせた応用として、次のような例が挙げられます。

www.officeisyours.com

配列結合演算子…表を縦横に連結する

 正確には関数ではありませんが、既存の表を縦または横に自由につなげることができます。
 一見地味なものの関数では代用できませんし、演算子で連結した表を関数の引数として利用できるケースが多々あるため、ぜひ覚えておいていただきたいと思います。

 画像では、4つに分かれている表を縦横に連結し1つにまとめています。

f:id:accs2014:20200505152306p:plain:w750

 H2セルに記されている式は次のようなものです。

={B2:C3,E2:F3;B5:C6,E5:F6}

 基本的にカンマ(,)で横に連結、セミコロン(;)で縦に連結することができ、全体を波カッコで囲みます。
 スプレッドシートではこのようにして連結した表を関数の引数として利用できる例が多々あるため、作業用の列や表を追加せずとも演算を進められるのがポイントです。
 利用例としては次のようなものがあります。

www.officeisyours.com