05 第2部 関数 / 関数を体系で身につける

主要関数カタログ

業務で頻出する関数を集計・論理・検索参照・テキスト・日付時刻・数値端数の6群に整理。各群を「用途→代表関数→構文→具体例→注意」で解説し、いつ何を使うかの地図と関数の選び方まで示す実践カタログ。

読了 約16分 最終更新 2026.06 SUMIFCOUNTIFIFXLOOKUPINDEX/MATCHVLOOKUPTEXTDATEDIF

関数は「暗記」するものではなく、「いつ何を使うか」の地図を持つものです。 業務で本当に使う関数は、実はそれほど多くありません。本章は頻出関数を群(カテゴリ)ごとに整理し、各群を「用途 → 代表関数 → 構文 → 具体例 → 注意」の流れで並べたカタログです。数式の書き方そのものや参照の固定($)は 第4章 関数の文法と参照 で扱っているので、ここでは「どの場面でどの関数を選ぶか」に重心を置きます。

本章で扱う関数群は次の6つです。

  1. 集計 — SUM, AVERAGE, COUNT 系, MAX/MIN, SUMIF(S), COUNTIF(S), AVERAGEIF(S), SUBTOTAL
  2. 論理 — IF, ネストIF と IFS, AND/OR/NOT, SWITCH, IFERROR
  3. 検索・参照 — VLOOKUP, HLOOKUP, INDEX+MATCH, XLOOKUP
  4. テキスト — LEFT/RIGHT/MID, LEN, TRIM, UPPER/LOWER, SUBSTITUTE, REPLACE, TEXT, 連結, SPLIT, REGEX 系
  5. 日付・時刻 — TODAY/NOW, DATE, YEAR/MONTH/DAY, EDATE, EOMONTH, DATEDIF, WEEKDAY, WORKDAY, NETWORKDAYS
  6. 数値・端数 — ROUND 系, INT, MOD, CEILING/FLOOR, ABS

数式は日本語ロケール前提で、引数の区切りは カンマ(, です。迷ったら一次情報の 関数リスト(公式) が頼りになります。

1. 集計の関数

数を「合計する・数える・平均する・最大最小を取る」群です。まずは無条件の基本形を押さえ、次に「条件付き」へ進みます。

基本の集計

関数用途構文
SUM合計SUM(範囲)=SUM(B2:B100)
AVERAGE平均AVERAGE(範囲)=AVERAGE(B2:B100)
COUNT数値の個数を数えるCOUNT(範囲)=COUNT(B2:B100)
COUNTA空でないセルの個数COUNTA(範囲)=COUNTA(A2:A100)
COUNTBLANK空白セルの個数COUNTBLANK(範囲)=COUNTBLANK(B2:B100)
MAX最大値MAX(範囲)=MAX(B2:B100)
MIN最小値MIN(範囲)=MIN(B2:B100)

COUNTCOUNTA の違いは事故の元になりやすいので明確に。COUNT数値が入ったセルだけ を数えます。文字列や空白は無視されます。一方 COUNTA文字でも数値でも、とにかく中身があれば 数えます。「データ件数(行数)を数えたい」なら、文字も含む COUNTA を使うのが基本です。

条件付き集計(ここが実務の本丸)

「特定の条件に合う行だけを合計/集計する」のが、業務でいちばん使う技です。〜IF は条件1つ、末尾に S が付く 〜IFS は条件を複数指定できます。

関数用途構文
SUMIF1条件で合計SUMIF(条件範囲, 条件, 合計範囲)
SUMIFS複数条件で合計SUMIFS(合計範囲, 条件範囲1, 条件1, 条件範囲2, 条件2, …)
COUNTIF1条件で個数COUNTIF(範囲, 条件)
COUNTIFS複数条件で個数COUNTIFS(条件範囲1, 条件1, 条件範囲2, 条件2, …)
AVERAGEIF1条件で平均AVERAGEIF(条件範囲, 条件, 平均範囲)
AVERAGEIFS複数条件で平均AVERAGEIFS(平均範囲, 条件範囲1, 条件1, …)
MAXIFS / MINIFS複数条件での最大 / 最小MAXIFS(最大範囲, 条件範囲1, 条件1, …)

条件の書き方にはコツがあります。完全一致なら値をそのまま、比較や部分一致なら 演算子やワイルドカードを文字列として 渡します。

条件の書き方

売上表(B列=部署, C列=金額, D列=日付)での集計。
=SUMIF(B2:B100, "営業部", C2:C100) — 部署が「営業部」の合計
=COUNTIF(C2:C100, ">=10000") — 1万以上の件数(比較は文字列で囲む)
=COUNTIF(B2:B100, "*営業*") — 「営業」を含む部署の件数(* は任意個の文字、? は任意の1文字)
=SUMIFS(C2:C100, B2:B100, "営業部", D2:D100, ">="&DATE(2026,1,1)) — 営業部かつ今年以降の合計

最後の例の ">="&DATE(2026,1,1) のように、演算子を文字列にしてセル値や関数結果と & でつなぐ 書き方は頻出です。">="&G1 のようにセル参照と組み合わせれば、条件を画面から動的に変えられます。

SUBTOTAL — フィルタと相性のよい集計

SUBTOTAL は「集計の方法を番号で指定する」関数です。最大の特徴は、フィルタで非表示になった行を除いて集計できる こと。SUM はフィルタで隠れた行も足してしまいますが、SUBTOTAL9(合計)などはフィルタ後の見えている行だけを対象にできます。なお 9 番台はフィルタで隠れた行のみを除外109 のような 1xx 番台は「手動で非表示にした行」も加えて除外します(フィルタだけなら結果は同じになります)。

構文意味
SUBTOTAL(集計方法, 範囲)集計方法は番号。1=平均, 2=COUNT, 3=COUNTA, 9=合計, 4=最大, 5=最小 など
フィルタ後だけ合計したい
=SUBTOTAL(9, C2:C100) — フィルタで絞り込んだ「見えている行」だけを合計
=SUM(C2:C100) — フィルタで隠した行も合計に含めてしまう

順位・上位・積和 — RANK / LARGE / SUMPRODUCT

「N番目に大きい値」「順位」「重み付き合計」など、集計の一歩進んだ道具です。

関数用途構文
MEDIAN中央値MEDIAN(範囲)=MEDIAN(B2:B100)
LARGE / SMALLN番目に大きい / 小さい値LARGE(範囲, N)=LARGE(B2:B100, 3)(3番目に大きい値)
RANK範囲内での順位RANK(値, 範囲, [昇順])=RANK(B2, $B$2:$B$100)(既定は降順=大きいほど1位)
SUMPRODUCT対応要素を掛けてから合計(加重和・複数条件集計)SUMPRODUCT(範囲1, 範囲2, …)=SUMPRODUCT(B2:B10, C2:C10)
ROWS / COLUMNS範囲の行数 / 列数ROWS(範囲)=ROWS(A2:A100)

SUMPRODUCT は「単価×数量の合計」のような 加重合計 に使えるほか、条件式を掛け合わせて 複数条件の件数・合計 も出せます(=SUMPRODUCT((A2:A10="東京")*(B2:B10>=100)) で「東京かつ100以上」の件数)。RANK は同値があると同順位になり、次の順位が飛ぶ点に注意します。

2. 論理の関数

「条件によって結果を変える」「複数条件を組み合わせる」群です。

関数用途構文
IF条件で2分岐IF(条件, 真の値, 偽の値)=IF(C2>=10000, "達成", "未達")
IFS多分岐(条件を上から判定)IFS(条件1, 値1, 条件2, 値2, …)下記参照
ANDすべて満たすかAND(条件1, 条件2, …)=AND(C2>0, D2<>"")
ORどれか満たすかOR(条件1, 条件2, …)=OR(B2="A", B2="B")
NOT真偽を反転NOT(条件)=NOT(ISBLANK(A2))
SWITCH値ごとに対応を返すSWITCH(式, 値1, 結果1, …, 既定値)下記参照
IFERRORエラー時の代替を返すIFERROR(式, エラー時の値)=IFERROR(A2/B2, 0)

ネストIF と IFS の使い分け

分岐が3つ以上になると、IF を入れ子(ネスト)にできますが、深くなるほど読めなくなります。3分岐以上は IFS を使う のが定石です。IFS は「条件と値のペア」を上から順に判定し、最初に真になったものを返します。

多分岐は IFS で読みやすく

点数(B2)を評価に変換する。
=IF(B2>=80,"A",IF(B2>=60,"B",IF(B2>=40,"C","D"))) — 括弧が深くて壊しやすい
=IFS(B2>=80,"A", B2>=60,"B", B2>=40,"C", TRUE,"D") — 上から判定、TRUE が「それ以外」

IFS で「どの条件にも当てはまらない場合」を受けるには、最後に TRUE を条件にした行 を置きます。これが「else(それ以外)」の役割です。値そのもので分岐するなら SWITCH がさらに簡潔です。

値による分岐は SWITCH
=SWITCH(B2, "東", "東日本", "西", "西日本", "その他") — B2の値ごとに対応を返す。末尾は既定値

AND / OR / NOT と IFERROR

AND / OR は単独でも TRUE/FALSE を返しますが、多くは IF の条件部分に入れて使います。=IF(AND(C2>0, D2<>""), "OK", "確認") のように「複数条件をすべて満たすときだけOK」を表現できます。

IFERROR はエラー処理の定番です。VLOOKUP などで「見つからない」ときの #N/A を、空文字や 0、任意のメッセージに置き換えられます。

3. 検索・参照の関数

「あるキー(商品コードなど)に対応する値を、別の表から引っ張ってくる」群です。ビジネスで最も価値が高く、同時に最も事故が多い領域です。

VLOOKUP — 基本だが落とし穴も多い

VLOOKUP は「表の左端の列でキーを探し、同じ行の右側にある指定列の値を返す」関数です。

構文VLOOKUP(検索値, 範囲, 列番号, 検索の型)
検索の型FALSE(完全一致・推奨)/ TRUE(近似一致・要ソート)
VLOOKUP の基本

商品マスタ(A列=コード, B列=商品名, C列=単価)からコードで単価を引く。
=VLOOKUP(F2, マスタ!A:C, 3, FALSE) — コードF2を探し、3列目(単価)を返す。完全一致は FALSE

HLOOKUPVLOOKUP の横版で、「表の最上行でキーを探し、同じ列の下方向にある値を返す」関数です(HLOOKUP(検索値, 範囲, 行番号, 検索の型))。データは縦持ちが基本なので出番は多くありませんが、横方向の表を引くときに使います。

INDEX + MATCH — 柔軟で壊れにくい

INDEXMATCH の組み合わせは、VLOOKUP の弱点をほぼ解消します。MATCH で「キーが何行目(何番目)か」を求め、INDEX で「その位置の値」を取り出します。

関数構文役割
MATCHMATCH(検索値, 検索範囲, 0)一致する位置(番号)を返す。0 は完全一致
INDEXINDEX(範囲, 行番号, 列番号)範囲内の指定位置の値を返す
INDEX+MATCH で左方向も引ける

A列=商品名, B列=コード の表で、コード(F2)から左の商品名を引く。
=INDEX(A:A, MATCH(F2, B:B, 0)) — B列でF2の位置を探し、その位置のA列を返す。左方向もOK
VLOOKUP(F2, A:B, ?, FALSE) — キー(B列)の左にある商品名は引けない

INDEX+MATCH の強みは、列を番号でなく「列そのもの」で指定する こと。表の途中に列を挿入してもズレません。VLOOKUP の「列番号がもろい」問題が起きないのです。

XLOOKUP — 新しく、強力

XLOOKUP は Google スプレッドシートで利用可能な比較的新しい関数(2022年頃に導入)で、VLOOKUPINDEX+MATCH の良いところを1つにまとめたものです。

構文XLOOKUP(検索値, 検索範囲, 結果範囲, [見つからない場合], [一致モード], [検索モード])
  • 検索範囲と結果範囲を別々に指定するため、左右どちらの方向にも引けます。
  • 見つからない場合の値を引数で直接指定できるので、IFERROR で包む必要がありません。
  • 検索モードで 末尾から検索(最後に一致したものを取る)なども指定できます。
XLOOKUP の基本
=XLOOKUP(F2, B:B, A:A, "該当なし") — B列でF2を探し対応するA列を返す。無ければ「該当なし」
=XLOOKUP(F2, コード列, 単価列) — 列番号を使わないので列挿入に強い

いつどれを使うか — 検索関数の比較

観点VLOOKUPINDEX+MATCHXLOOKUP
左方向に引く✕ 不可○ 可能○ 可能
列挿入への強さ✕ 列番号がずれる○ 強い○ 強い
見つからない時の既定IFERROR 等で別途処理同左△ 引数で直接指定できる
書きやすさ○ 直感的△ 2関数の組合せ○ 1関数で完結
古い環境での通用○ どこでも○ どこでも△ 新しめの関数

XMATCH / CHOOSE / INDIRECT / LOOKUP — その他の検索・参照

関数用途構文
XMATCH一致する位置(番号)を返す MATCH の新版XMATCH(検索値, 検索範囲, [一致モード], [検索モード])=INDEX(A:A, XMATCH(F2, B:B))
CHOOSE番号に対応する値を選ぶCHOOSE(番号, 値1, 値2, …)=CHOOSE(2, "月","火","水")
INDIRECT文字列をセル参照に変換INDIRECT(参照文字列)=SUM(INDIRECT("B2:B"&G1))
LOOKUP1行/1列での近似検索(要・昇順)LOOKUP(検索値, 検索範囲, [結果範囲])=LOOKUP(F2, A2:A10, B2:B10)

XMATCHMATCH の上位版で、=INDEX(結果列, XMATCH(キー, 検索列)) のように使うと左右どちらの方向にも引け、XLOOKUP と同等の柔軟さになります。INDIRECT は「文字列で組み立てた範囲」を参照に変える関数で、範囲を動的に変えられる反面、参照関係が追いにくくなるため多用は禁物です。

4. テキストの関数

文字列を「取り出す・整える・結合する・分ける」群です。表記ゆれの除去やコード分解で活躍します。

取り出し・長さ・整形

関数用途構文
LEFT / RIGHT左 / 右から n 文字LEFT(文字列, 文字数)=LEFT(A2, 3)
MID途中から n 文字MID(文字列, 開始位置, 文字数)=MID(A2, 4, 2)
LEN文字数を数えるLEN(文字列)=LEN(A2)
TRIM前後・連続の余分な空白を除去TRIM(文字列)=TRIM(A2)
UPPER / LOWER大文字 / 小文字に変換UPPER(文字列)=UPPER(A2)
SUBSTITUTE指定の文字列を置換SUBSTITUTE(文字列, 検索, 置換)=SUBSTITUTE(A2, "-", "")
REPLACE位置を指定して置換REPLACE(文字列, 開始位置, 文字数, 新文字列)=REPLACE(A2, 1, 3, "JPN")
FIND文字の位置を探す(大小区別あり)FIND(検索文字, 対象, [開始位置])=FIND("-", A2)
SEARCH文字の位置を探す(大小区別なし)SEARCH(検索文字, 対象, [開始位置])=SEARCH("@", A2)
VALUE数字の文字列を数値に変換VALUE(文字列)=VALUE("1,200")1200
ASC全角の英数字・カナを半角にASC(文字列)=ASC("ABC123")ABC123
JIS半角の英数字・カナを全角にJIS(文字列)=JIS("ABC")ABC

SUBSTITUTEREPLACE は似ていますが、SUBSTITUTE は「文字の中身」で置換(ハイフンを全部消す等)、REPLACE は「位置」で置換(先頭3文字を入れ替える等)します。表記ゆれ掃除では SUBSTITUTE のほうが出番が多いです。

TEXT — 数値を「書式付きの文字列」に

TEXT は、数値や日付を 指定の書式の文字列 に変換します。表示形式(見た目だけ変える)と違い、文字列そのもの を作るので、連結や帳票の文面づくりに使えます。

TEXT で書式付き文字列を作る
=TEXT(1234567, "#,##0")1,234,567(桁区切りの文字列)
=TEXT(A2, "yyyy年m月d日")2026年6月3日(日付を和文表記の文字列に)
="請求額は"&TEXT(C2,"¥#,##0")&"です"請求額は¥1,200です

書式記号の 0# は似て非なるものです。0 は桁が無くても必ず 0 を表示=TEXT(5, "00")05)、# は有効な桁だけを表示(不要な 0 を出さない)。#,##0 は「3桁ごとにカンマ・整数部は最低1桁」を意味し、桁区切りの定番書式です。

連結 — & / CONCATENATE / TEXTJOIN

文字列をつなぐ基本は & 演算子 です。=A2&"様" のように直感的に書けます。関数で書くなら CONCATENATE区切り文字を挟んで一気につなぐ なら TEXTJOIN が便利です。

関数用途構文
&単純連結=A2&B2
CONCATENATE関数形式の連結CONCATENATE(文字列1, 文字列2, …)
TEXTJOIN区切り文字付きで連結(空セルの扱いを選べる)TEXTJOIN(区切り文字, 空を無視するか, 範囲…)
TEXTJOIN で住所などをまとめる
=TEXTJOIN(", ", TRUE, A2:D2) — A2〜D2を「, 」でつなぐ。空セルは無視(第2引数 TRUE

分割と正規表現

SPLIT は1セルの文字列を 区切り文字で複数セルに分解 します。REGEXEXTRACT / REGEXMATCH / REGEXREPLACE は正規表現でパターンを抽出・判定・置換する強力な3関数です。

関数用途構文(概略)
SPLIT区切りで分割SPLIT(文字列, 区切り文字)
REGEXEXTRACTパターンに合う部分を取り出すREGEXEXTRACT(文字列, 正規表現)
REGEXMATCHパターンに合うかを判定REGEXMATCH(文字列, 正規表現)
REGEXREPLACEパターンを置換REGEXREPLACE(文字列, 正規表現, 置換)

正規表現は強力な反面、慣れが要ります。分割や抽出を使った 本格的なデータ整形第8章 データ整形 でまとめて扱います。正規表現そのものを基礎から完全に理解したい人は、専用章 正規表現 完全ガイド(RE2) に、使える記号の早見表・便利なパターン集・「RE2に無い機能」までまとめてあります。ここでは「こういう道具がある」とだけ覚えておけば十分です。

5. 日付・時刻の関数

スプレッドシートの日付は、内部的には シリアル値(1日=1の連番。時刻はその小数部)です。だから日付どうしを引き算すると日数が出ます。この前提を押さえると、日付関数は一気に分かりやすくなります。

関数用途構文
TODAY今日の日付TODAY()=TODAY()
NOW現在の日時NOW()=NOW()
DATE年月日から日付を作るDATE(年, 月, 日)=DATE(2026,6,3)
YEAR / MONTH / DAY年 / 月 / 日を取り出すYEAR(日付)=MONTH(A2)
EDATEn か月後 / 前の同日EDATE(日付, 月数)=EDATE(A2, 3)
EOMONTHn か月後 / 前の月末EOMONTH(日付, 月数)=EOMONTH(A2, 0)
WEEKDAY曜日を番号で返すWEEKDAY(日付, 種類)=WEEKDAY(A2, 2)
WORKDAYn 営業日後の日付WORKDAY(開始日, 日数, [祝日])=WORKDAY(A2, 5)
NETWORKDAYS期間内の営業日数NETWORKDAYS(開始日, 終了日, [祝日])=NETWORKDAYS(A2, B2)
WEEKNUMその日が年の第何週かWEEKNUM(日付, [週の基準])=WEEKNUM(A2)
DATEDIF2日付の差(年/月/日)DATEDIF(開始日, 終了日, 単位)=DATEDIF(A2, B2, "Y")
DATEVALUE日付文字列を日付(シリアル値)に変換DATEVALUE(日付文字列)=DATEVALUE("2026-03-15")

EDATEEOMONTH は請求・締めの計算で重宝します。=EOMONTH(A2, 0) は「その月の月末」、=EOMONTH(A2, 1) は「翌月末」です。WORKDAY / NETWORKDAYS は土日(と指定した祝日)を除いて数えるので、納期や稼働日数の計算に向きます。

6. 数値・端数の関数

「丸める・整える・余りを取る」群です。表示形式の丸めは見た目だけですが、ここで扱う関数は 値そのもの を変えます。

関数用途構文
ROUND四捨五入ROUND(数値, 桁数)=ROUND(123.456, 1)123.5
ROUNDUP切り上げROUNDUP(数値, 桁数)=ROUNDUP(123.41, 1)123.5
ROUNDDOWN切り捨てROUNDDOWN(数値, 桁数)=ROUNDDOWN(123.49, 1)123.4
INT小数を切り捨てて整数にINT(数値)=INT(3.9)3
MOD割った余りMOD(数値, 除数)=MOD(7, 3)1
CEILING基準値の倍数に切り上げCEILING(数値, 基準値)=CEILING(23, 10)30
FLOOR基準値の倍数に切り下げFLOOR(数値, 基準値)=FLOOR(23, 10)20
ABS絶対値ABS(数値)=ABS(-5)5

桁数の指定がポイントです。ROUND(値, 0) で整数に、ROUND(値, 1) で小数1桁に、ROUND(値, -2) のように マイナスを指定すると百の位などで丸め られます(=ROUND(1234, -2)1200)。MOD は「偶数行だけ色を変える」「n 個ごとに区切る」といった判定にも応用できます。

関数の選び方 — 用途からの逆引き

最後に「やりたいこと」から関数へたどる地図です。迷ったらここから入ってください。

やりたいこと使う関数
条件に合う行だけ合計/件数/平均したいSUMIFS / COUNTIFS / AVERAGEIFS(複数形に統一すると順序が安定)
フィルタで絞った「見えている行」だけ集計したいSUBTOTAL
条件で表示を出し分けたい(2分岐)IF
3つ以上に分岐したいIFS(末尾に TRUE で「それ以外」) / 値で分けるなら SWITCH
別の表からキーで値を引きたいまず XLOOKUP、無ければ INDEX+MATCH、単純な右引きのみ VLOOKUP
エラー(#N/A 等)を見せたくないIFERROR / #N/A だけなら IFNA
文字から一部を取り出す/掃除するLEFTMIDRIGHTTRIMSUBSTITUTE
数値や日付を書式付きの文字列にしたいTEXT
営業日・月末・n か月後を求めたいWORKDAYNETWORKDAYSEOMONTHEDATE
値そのものを丸めたいROUND / ROUNDUP / ROUNDDOWN
検索

引くなら XLOOKUP

左右どちらも引け、列挿入に強く、見つからない時も引数で指定可。古い環境向けは INDEX+MATCH が堅実。

集計

条件集計は IFS 系

SUMIFS / COUNTIFS に統一すると引数順が安定。比較・部分一致は条件を文字列で渡す。

検証

迷ったら公式リスト

利用可否や引数に迷ったら関数リスト(公式)で一次確認。捏造より確認が速い。

ここまでで、業務頻出の関数を「いつ何を使うか」の地図として持てました。とはいえ、近年のスプレッドシートは1つの数式で範囲全体を返す 配列・スピル の時代に入っています。次は 第6章 配列・スピル時代の関数 で、ARRAYFORMULAQUERY といった「1本で表を動かす」関数へ進みましょう。