はじめに
表計算ソフトなどの関数と、プログラミング言語の関数
どちらの関数も、「ある入力(引数)をもとに、処理をして、結果を返す」という点では共通しています。 =SUM(1, 2, 3) → 結果は 6 と sum([1, 2, 3]) # 結果は 6 このように、「入力 → 処理 → 結果」の構造は同じ。違いは、Excelなどの関数は最初から組み込まれているものを使うのが基本です(例:SUM, IF, VLOOKUPなど)。「関数を使って計算する」という使い方が中心です。自分で関数を定義することは基本的にできません(ただし、マクロやVBAを使えば可能)。「関数を使って計算する」という使い方が中心です。プログラミング言語では、関数を自分で定義できます。
関数の目的としてExcelなどの関数の主な目的はデータ計算・集計などで、使用方法がセルに直接書くのに対してプログラミングの関数の主な目的はロジック・処理を整理・再利用で使用方法はコードの中で呼び出すことによって自由に定義できる。
Excelで関数を使う時に出てくる代表的な用語
セル(Cell)
画面にある「マス目」の1つ1つのことを指し1つのマスは「列+行」で場所を表します(例:A1、B2、C3など)。ここに文字を入れたり、数字を入れたり、計算式(数式)を入れたりします。基本的に、1つのセルには「1つの値」しか表示(出力)できません。つまり、「命令は複雑でもOKだけど、結果は必ず1つ」ということです。IFのように条件によって結果が変わっても、最終的に出力するのは文字列1つだけ(例:「高い」または「安い」)。SUMのような複数のセルを対象にしても、合計という1つの数値しか返さない。できないことの例として「このセルに A列の合計も出して、ついでにB列の平均も表示しよう」というように、1セルで2つ以上の出力(答え)を見せることはできません。 関数(Function)
あらかじめ決められた計算のルール。計算式の一種で、「=関数名(必要なデータ)」という形で使います。
引数(Arguments)
関数が「何を計算するか」を決めるための計算対象となるデータや範囲が「引数」です。 絶対参照(例:$A$1)
$マークで固定します(列と行の前に$をつける)。セルをコピーしても常にA1を見るようにしたいときに使います。
相対参照(例:A1)
コピーしたら、それに応じて見る場所も変わるようにしたいとき。
数式(Formula)
セルの中に入れる = から始まるのがルール。数字同士の計算や、関数を使った命令などが含まれます
一覧(Excel)
数学/三角関数
基本的な計算から、高度な数学計算までを行う関数群です。
| 関数名 | 機能概要 |
|---|---|
| SUM | 数値を合計する |
| SUMIF | 条件を指定して数値を合計する |
| SUMIFS | 複数の条件を指定して数値を合計する |
| SUBTOTAL | さまざまな集計値を求める |
| AGGREGATE | さまざまな集計値、順位や分位数を求める |
| PERCENTOF | 割合を求める |
| PRODUCT | 積を求める |
| SUMPRODUCT | 配列要素の積を合計する |
| SUMSQ | 平方和を求める |
| SUMX2PY2 | 2つの配列要素の平方和を合計する |
| SUMX2MY2 | 2つの配列要素の平方差を合計する |
| SUMXMY2 | 2つの配列要素の差の平方和を求める |
| ROUND | 四捨五入して指定の桁数まで求める |
| ROUNDDOWN / TRUNC | 切り捨てて指定の桁数まで求める |
| ROUNDUP | 切り上げて指定の桁数まで求める |
| INT | 小数点以下を切り捨てる |
| FLOOR.MATH | 数値を基準値の倍数に切り捨てる |
| FLOOR.PRECISE | 数値を基準値の倍数に切り捨てる |
| MROUND | 指定した数値の倍数になるように丸める |
| CEILING.MATH | 数値を基準値の倍数に切り上げる |
| ISO.CEILING / CEILING.PRECISE | 数値を基準値の倍数に切り上げる |
| EVEN / ODD | 偶数または奇数に切り上げる |
| QUOTIENT | 整数商を求める |
| MOD | 余りを求める |
| ABS | 絶対値を求める |
| SIGN | 正負を調べる |
| GCD | 最大公約数を求める |
| LCM | 最小公倍数を求める |
| FACT | 階乗を求める |
| FACTDOUBLE | 二重階乗を求める |
| PERMUT | 順列の数を求める |
| COMBIN | 組み合わせの数を求める |
| PERMUTATIONA | 重複順列の数を求める |
| COMBINA | 重複組み合わせの数を求める |
| MULTINOMIAL | 多項係数を求める |
| SERIESSUM | べき級数を求める |
| SQRT | 平方根を求める |
| SQRTPI | 円周率πの倍数の平方根を求める |
| POWER | べき乗を求める |
| EXP | 自然対数の底eのべき乗を求める |
| LOG | 任意の数値を底とする対数を求める |
| LOG10 | 常用対数を求める |
| LN | 自然対数を求める |
| PI | 円周率πの近似値を求める |
| RADIANS | 度をラジアンに変換する |
| DEGREES | ラジアンを度に変換する |
| SIN | 正弦(サイン)を求める |
| COS | 余弦(コサイン)を求める |
| TAN | 正接(タンジェント)を求める |
| CSC | 余割(コセカント)を求める |
| SEC | 正割(セカント)を求める |
| COT | 余接(コタンジェント)を求める |
| ASIN | 逆正弦(アークサイン)を求める |
| ACOS | 逆余弦(アークコサイン)を求める |
| ATAN | 逆正接(アークタンジェント)を求める |
| ATAN2 | x-y座標から逆正接を求める |
| ACOT | 逆余接(アークコタンジェント)を求める |
| SINH | 双曲線正弦(ハイパボリックサイン)を求める |
| COSH | 双曲線余弦(ハイパボリックコサイン)を求める |
| TANH | 双曲線正接(ハイパボリックタンジェント)を求める |
| CSCH / SECH / COTH | 双曲線余割・正割・余接を求める |
| ASINH / ACOSH / ATANH / ACOTH | 逆双曲線関数を求める |
| MDETERM | 行列の行列式を求める |
| MINVERSE | 行列の逆行列を求める |
| MMULT | 2つの行列の積を求める |
| MUNIT | 単位行列を求める |
| SEQUENCE | 等差数列が入った配列を作成する |
| RANDBETWEEN | 乱数を発生させる(整数) |
| RAND | 乱数を発生させる(0以上1未満の実数) |
| RANDARRAY | 乱数が入った配列を作成する |
日付/時刻関数
日付や時刻のシリアル値操作、期間計算などを行う関数群です。
| 関数名 | 機能概要 |
|---|---|
| TODAY / NOW | 現在の日付、または現在の日付と時刻を求める |
| YEAR / MONTH / DAY | 日付から年、月、日を取り出す |
| MINUTE / SECOND / HOUR | 時刻から分、秒、時を取り出す |
| WEEKDAY | 日付から曜日を取り出す |
| WEEKNUM / ISOWEEKNUM | 日付が何週目かを求める |
| DATESTRING | 日付を和暦に変換する |
| DATEVALUE / TIMEVALUE | 日付・時刻文字列からシリアル値を求める |
| DATE | 年、月、日から日付を求める |
| TIME | 時、分、秒から時刻を求める |
| EOMONTH | 数カ月前や数カ月後の月末を求める |
| EDATE | 数カ月前や数カ月後の日付を求める |
| WORKDAY | 土日と祝日を除外して期日を求める |
| WORKDAY.INTL | 指定した休日を除外して期日を求める |
| DAYS | 2つの日付から期間内の日数を求める |
| DAYS360 | 1年を360日として期間内の日数を求める |
| NETWORKDAYS | 土日と祝日を除外して期間内の日数を求める |
| NETWORKDAYS.INTL | 指定した休日を除外して期間内の日数を求める |
| DATEDIF | 期間内の年数、月数、日数を求める |
| YEARFRAC | 期間が1年間に占める割合を求める |
統計関数
平均、順位、分散、標準偏差、確率分布など統計解析を行う関数群です。
| 関数名 | 機能概要 |
|---|---|
| COUNT / COUNTA | 数値やデータ、空でないセルの個数を求める |
| COUNTBLANK | 空のセルの個数を求める |
| COUNTIF | 条件に一致するデータの個数を求める |
| COUNTIFS | 複数の条件に一致するデータの個数を求める |
| AVERAGE / AVERAGEA | 数値またはデータの平均値を求める |
| AVERAGEIF / AVERAGEIFS | 条件を指定して数値の平均を求める |
| TRIMMEAN | 極端なデータを除外して平均値を求める |
| GEOMEAN / HARMEAN | 相乗平均 / 調和平均を求める |
| MAX / MIN | 数値の最大値または最小値を求める |
| MAXA / MINA | データの最大値または最小値を求める |
| MAXIFS / MINIFS | 複数の条件で最大値または最小値を求める |
| FREQUENCY | 区間に含まれる値の個数を求める |
| MEDIAN | 数値の中央値を求める |
| MODE.SNGL / MODE / MODE.MULT | 数値の最頻値を求める |
| LARGE / SMALL | 大きい/小さいほうから何番目かの値を求める |
| RANK.EQ / RANK / RANK.AVG | 順位を求める |
| PERCENTILE.INC 等 | 百分位数を求める |
| PERCENTRANK.INC 等 | 百分率での順位を求める |
| QUARTILE.INC 等 | 四分位数を求める |
| VAR.P / VAR.S / VARPA / VARA | 分散・不偏分散を求める |
| STDEV.P / STDEV.S | 標準偏差・不偏標準偏差を求める(数値のみ) |
| STDEVPA / STDEVA | 標準偏差・不偏標準偏差を求める(データ含む) |
| AVEDEV | 平均偏差を求める |
| DEVSQ | 変動を求める |
| STANDARDIZE | 標準化変量を求める |
| SKEW / SKEW.P | 歪度を求める |
| KURT | 尖度を求める |
| FORECAST.LINEAR | 単回帰分析を使って予測する |
| TREND / GROWTH | 重回帰分析 / 指数回帰曲線を使って予測する |
| SLOPE / INTERCEPT | 回帰直線の傾き / 切片を求める |
| LINEST / LOGEST | 重回帰分析 / 指数回帰曲線の係数などを求める |
| STEYX / RSQ | 回帰直線の標準誤差 / 当てはまりの良さを求める |
| CORREL / PEARSON | 相関係数を求める |
| FORECAST.ETS 関連 | 時系列分析による予測や統計量を求める |
| COVARIANCE.P / COVARIANCE.S | 共分散・不偏共分散を求める |
| CONFIDENCE.NORM / .T | 信頼区間を求める |
| PROB | 下限値から上限値までの確率を求める |
| BINOM.DIST 関連 | 二項分布の確率などを求める |
| HYPGEOM.DIST | 超幾何分布の確率を求める |
| POISSON.DIST | ポアソン分布の確率などを求める |
| NORM.DIST / NORM.INV | 正規分布の確率や逆関数の値を求める |
| NORM.S.DIST / NORM.S.INV | 標準正規分布の確率や逆関数の値を求める |
| PHI / GAUSS | 標準正規分布の確率などを求める |
| LOGNORM.DIST 関連 | 対数正規分布の確率などを求める |
| CHISQ.DIST / CHISQ.TEST 関連 | カイ二乗分布・検定を行う |
| T.DIST / T.TEST 関連 | t分布・t検定を行う |
| F.DIST / F.TEST 関連 | F分布・F検定を行う |
| Z.TEST | Z検定を行う |
| FISHER / FISHERINV | フィッシャー変換を行う |
| EXPON.DIST | 指数分布の確率などを求める |
| GAMMA / GAMMA.DIST 関連 | ガンマ関数・分布の値を求める |
| BETA.DIST 関連 | ベータ分布の確率などを求める |
| WEIBULL.DIST | ワイブル分布の値を求める |
文字列操作関数
文字列の加工、検索、変換などを行う関数群です。
| 関数名 | 機能概要 |
|---|---|
| LEN / LENB | 文字列の文字数またはバイト数を求める |
| LEFT / RIGHT / MID | 文字列の一部を取り出す |
| TEXTBEFORE / TEXTAFTER | 区切り文字の前または後ろを取り出す |
| TEXTSPLIT | 文字列を複数列・行に分割する |
| FIND / SEARCH | 文字列の位置を調べる |
| REPLACE / SUBSTITUTE | 文字列を置き換える |
| CONCAT / CONCATENATE | 文字列を連結する |
| TEXTJOIN | 区切り記号を挿入しながら連結する |
| TRIM / CLEAN | 余計な空白や印刷できない文字を削除する |
| ARRAYTOTEXT / VALUETOTEXT | 配列や値を文字列に変換する |
| PHONETIC | ふりがなを取り出す |
| REPT | 文字列を繰り返す |
| CODE / UNICODE | 文字コードを調べる |
| CHAR / UNICHAR | 文字コードから文字を返す |
| ASC / JIS | 半角・全角の変換を行う |
| YEN / DOLLAR | 通貨記号付きの文字列に変換する |
| UPPER / LOWER / PROPER | 大文字・小文字・先頭のみ大文字に変換する |
| TEXT | 表示形式を適用した文字列を返す |
| FIXED | 桁区切り記号と小数点を付ける |
| VALUE | 文字列を数値に変換する |
| NUMBERSTRING | 漢数字に変換する |
| NUMBERVALUE | 地域形式の数字を数値に変換する |
| BAHTTEXT | タイ文字の通貨表記に変換する |
| ROMAN / ARABIC | ローマ数字と数値を相互変換する |
| EXACT | 文字列が等しいか調べる |
| T | 文字列のときだけ文字列を返す |
| REGEXTEST | 正規表現に一致するか調べる |
| REGEXEXTRACT | 正規表現に一致する部分を取り出す |
| REGEXREPLACE | 正規表現で置換する |
| TRANSLATE | 翻訳する |
| DETECTLANGUAGE | 言語コードを調べる |
論理関数
条件分岐や論理判定を行う関数群です。
| 関数名 | 機能概要 |
|---|---|
| IF | 条件によって異なる値を返す |
| IFS | 複数の条件に応じて異なる値を返す |
| AND / OR | 全て/いずれかの条件を満たすか調べる |
| XOR | 奇数個の条件が満たされているかを調べる |
| NOT | 条件の否定を調べる |
| TRUE / FALSE | 真/偽を表す論理値を返す |
| IFERROR / IFNA | エラーの場合に返す値を指定する |
| SWITCH | 複数の値を検索して対応する値を返す |
| LET | 名前を付けた計算結果を利用する |
| LAMBDA | 関数を自作して利用する |
| MAP / MAKEARRAY | 配列を計算・作成する |
| ISOMITTED | 引数が省略されているかを返す |
| BYROW / BYCOL | 行ごと・列ごとに計算する |
| SCAN / REDUCE | 配列の値を累計する |
検索/行列関数・Web関数
データの検索、並べ替え、Web連携などを行う関数群です。
| 関数名 | 機能概要 |
|---|---|
| XLOOKUP | 範囲を検索して対応する値を返す |
| VLOOKUP / HLOOKUP | 縦方向・横方向に検索する |
| LOOKUP | 1行または1列の範囲を検索する |
| XMATCH / MATCH | 検索値の相対位置を求める |
| CHOOSE | リストから値を選ぶ |
| COLUMN / ROW | 列番号・行番号を求める |
| COLUMNS / ROWS | 列数・行数を求める |
| AREAS | 領域数を求める |
| INDEX | 行と列で指定したセルの参照を求める |
| OFFSET | 指定したセル範囲の参照を求める |
| INDIRECT | 文字列をもとにセルを参照する |
| ADDRESS | 行・列番号からセル参照文字列を求める |
| TRIMRANGE | 前後の空セルを除外した参照を返す |
| FILTER | 条件に一致する行を抽出する |
| UNIQUE | 重複データをまとめる |
| SORT / SORTBY | データを並べ替える |
| TAKE / DROP | 配列から行や列を取り出す/除外する |
| CHOOSEROWS / CHOOSECOLS | 配列から行や列を選んで取り出す |
| EXPAND | 配列を拡張する |
| VSTACK / HSTACK | 配列を積み重ねる |
| TOROW / TOCOL | 配列を1行または1列に並べる |
| WRAPROWS / WRAPCOLS | 配列を折り返す |
| TRANSPOSE | 行と列を入れ替える |
| GETPIVOTDATA | ピボットテーブルからデータを取り出す |
| FIELDVALUE | 株価や地理データの値を取り出す |
| RTD | RTDサーバーからデータを取り出す |
| GROUPBY | グループごとに集計する |
| PIVOTBY | ピボットテーブルのような集計表を作成 |
| HYPERLINK | ハイパーリンクを作成する |
| IMAGE | 画像を表示する |
| ENCODEURL | URLエンコードする |
| WEBSERVICE | Webデータをダウンロードする |
| FILTERXML | XMLから情報を取り出す |
データベース関数
表(リスト)形式のデータから条件抽出や集計を行う関数群です。
| 関数名 | 機能概要 |
|---|---|
| DCOUNT / DCOUNTA | 表を検索して個数を求める |
| DSUM | 表を検索して合計を求める |
| DAVERAGE | 表を検索して平均を求める |
| DPRODUCT | 表を検索して積を求める |
| DMAX / DMIN | 表を検索して最大値・最小値を求める |
| DGET | 表を検索してデータを取り出す |
| DVAR / DVARP | 表を検索して分散を求める |
| DSTDEV / DSTDEVP | 表を検索して標準偏差を求める |
財務関数
ローン、投資、減価償却などの計算を行う関数群です。
| 関数名 | 機能概要 |
|---|---|
| PMT | ローン返済額や積立額を求める |
| PPMT / IPMT | 元金相当分・金利相当分を求める |
| CUMPRINC / CUMIPMT | 元金・金利相当分の累計を求める |
| ISPMT | 元金均等返済の金利相当分を求める |
| PV / FV | 現在価値・将来価値を求める |
| FVSCHEDULE | 変動利率の将来価値を求める |
| NPER | 返済期間や積立期間を求める |
| RATE | 利率を求める |
| EFFECT / NOMINAL | 実効年利率・名目年利率を求める |
| RRI / PDURATION | 利率や期間を求める(複利・目標額) |
| NPV / XNPV | 正味現在価値を求める |
| IRR / XIRR / MIRR | 内部利益率・修正内部利益率を求める |
| YIELD / PRICE | 利付債の利回り・現在価格を求める |
| ACCRINT / ACCRINTM | 経過利息を求める |
| COUPPCD 等 | 利払日や日数を求める(債券) |
| DURATION / MDURATION | デュレーションを求める |
| ODDFYIELD / ODDFPRICE | 半端な期間の利回り・価格を求める |
| YIELDMAT / PRICEMAT | 満期利付債の利回り・価格を求める |
| YIELDDISC / PRICEDISC | 割引債の利回り・価格を求める |
| INTRATE / RECEIVED | 割引債の利回り・受取額を求める |
| DISC | 割引率を求める |
| TBILLYIELD 等 | 米国財務省短期証券の計算 |
| STOCKHISTORY | 株価情報を取得する |
| DOLLARDE / DOLLARFR | ドル価格の表記変換 |
| SLN | 定額法で減価償却費を求める |
| DB / DDB / VDB | 定率法などで減価償却費を求める |
| SYD | 算術級数法で減価償却費を求める |
| AMORLINC 等 | フランス会計システムでの減価償却 |
エンジニアリング関数
単位変換、進数変換、複素数計算など専門的な関数群です。
| 関数名 | 機能概要 |
|---|---|
| CONVERT | 単位を変換する |
| DELTA / GESTEP | 数値の比較・判定を行う |
| DEC2BIN / DEC2OCT / DEC2HEX | 10進数を他進数に変換 |
| BASE | 10進数をn進数に変換 |
| BIN2OCT / BIN2DEC / BIN2HEX | 2進数を他進数に変換 |
| OCT2BIN / OCT2DEC / OCT2HEX | 8進数を他進数に変換 |
| HEX2BIN / HEX2OCT / HEX2DEC | 16進数を他進数に変換 |
| DECIMAL | n進数を10進数に変換 |
| BITAND / BITOR / BITXOR | ビット演算を行う |
| BITLSHIFT / BITRSHIFT | ビットシフトを行う |
| COMPLEX | 複素数を作成する |
| IMREAL / IMAGINARY | 実部・虚部を求める |
| IMCONJUGATE | 共役複素数を求める |
| IMABS / IMARGUMENT | 絶対値・偏角を求める |
| IMSUM / IMSUB / IMPRODUCT / IMDIV | 複素数の四則演算 |
| IMSQRT / IMPOWER / IMEXP | 複素数の平方根・べき乗・指数関数 |
| IMLN / IMLOG10 / IMLOG2 | 複素数の対数関数 |
| IMSIN / IMCOS 等 | 複素数の三角関数 |
| IMSINH / IMCOSH 等 | 複素数の双曲線関数 |
| BESSELJ / BESSELY 等 | ベッセル関数を求める |
| ERF / ERFC | 誤差関数・相補誤差関数を求める |
情報関数
セルの状態やシステム情報を調べる関数群です。
| 関数名 | 機能概要 |
|---|---|
| CELL | セルの情報を得る |
| ISBLANK | 空のセルかどうかを調べる |
| ISERROR / ISERR / ISNA | エラー値かどうかを調べる |
| ISTEXT / ISNONTEXT | 文字列かどうかを調べる |
| ISNUMBER | 数値かどうかを調べる |
| ISEVEN / ISODD | 偶数か奇数かを調べる |
| ISLOGICAL | 論理値かどうかを調べる |
| ISFORMULA | 数式かどうかを調べる |
| FORMULATEXT | 数式を文字列として取り出す |
| ISREF | セル参照かどうかを調べる |
| INFO | 操作環境の情報を得る |
| SHEET / SHEETS | シート番号・シート数を調べる |
| ERROR.TYPE | エラー値の種類を調べる |
| TYPE | データの種類を調べる |
| NA | エラー値 [#N/A] を返す |
| N | 引数を数値に変換する |
| PY | Pythonのプログラムを実行する |
キューブ関数
分析用データ(キューブ)を操作する高度な関数群です。
| 関数名 | 機能概要 |
|---|---|
| CUBEMEMBER | メンバーや組を返す |
| CUBEMEMBERPROPERTY | メンバーのプロパティを求める |
| CUBESET | セットを取り出す |
| CUBESETCOUNT | セット内の項目数を求める |
| CUBEVALUE | 集計値を求める |
| CUBERANKEDMEMBER | 指定した順位のメンバーを求める |
| CUBEKPIMEMBER | KPIのプロパティを返す |
条件判断(IF,AND,OR)
IF関数
IF(イフ)関数は、プログラミングや表計算ソフト(Excel、Googleスプレッドシートなど)において、「もし◯◯だったらA、そうでなければB」という条件分岐を行うための最も基本的かつ重要な関数です。
IF関数の基本構造
IF関数は、以下の3つの要素(引数・ひきすう)で構成されています。
=IF(論理式, 真の場合, 偽の場合)
| 要素 | 説明 | 具体例 |
| ① 論理式 | 「もし〜ならば」という条件 | A1 >= 80 (A1セルが80以上なら) |
| ② 真の場合 | 条件に当てはまる時に返す値 | "合格" |
| ③ 偽の場合 | 条件に当てはまらない時に返す値 | "不合格" |
例1:セルA1に入っている点数が「70点以上」なら「合格」、それ以外なら「不合格」と表示したい場合(Excel)。
数式: =IF(A1>=70, “合格”, “不合格”)
文字列を表示させる場合は、必ずダブルクォーテーション " で囲みます。
例2:数式を入れていると、データが入っていないのに「0」やエラーが表示されることがあり,これを防ぐ。「A1セルが空白なら空白を表示、そうでなければ計算(A1×1.1)をする」場合(Excel)。
数式: =IF(A1=””, “”, A1*1.1)
"" は「何もない(空文字)」を意味します。
論理式で使う記号(比較演算子)条件を指定する際に使う。
A1 = B1 : A1とB1が等しい
A1 > B1 : A1がB1より大きい(超過)
A1 >= B1 : A1がB1以上
A1 < B1 : A1がB1より小さい(未満)
A1 <= B1 : A1がB1以下
A1 <> B1 : A1とB1が等しくない
条件が複数ある場合
「80点以上はA、60点以上はB、それ以外はC」のように、3つ以上の分岐を作りたい場合
方法A:入れ子(ネスト)にする
IF関数の中に、さらにIF関数を入れます(Excel)。
=IF(A1>=80, “A”, IF(A1>=60, “B”, “C”))
まず80以上か判定し、違うなら次のIF(60以上か)へ進み、それも違うならCになります。
方法B:IFS関数を使う
最新のExcelやGoogleスプレッドシートでは、IFS(イフス)関数を使う(Excel)。
=IFS(A1>=80, “A”, A1>=60, “B”, TRUE, “C”)
条件と結果を順番に並べるだけで済みます。
プログラミング言語におけるIF
Excelだけでなく、PythonやJavaなどのプログラミング言語でも考え方は同じです。ただし、書き方(構文)が異なります。
Python
if score >= 70:
print("合格")
else:
print("不合格")
構造は違いますが、「条件」「真の処理」「偽の処理」というロジックは共通しています。
IF関数は、「条件を明確にすること」と「それ以外(偽)の場合をどうするか決めること」です。
AND関数
AND(アンド)関数は、IF関数と組み合わせることで、より複雑で厳密な条件判定を可能にする、非常に強力なサポート役です。IF関数が「AならばB」という単純な分岐だったのに対し、AND関数を使うと「Aであり、かつBでもあり、かつCでもあるならば…」というふうに、全ての条件が揃った時だけOKを出すことができます。
AND関数の基本
AND関数は、指定したすべての条件が「満たされている(TRUE)」場合のみ、「TRUE」を返す関数です。一つでも満たされていない条件があれば、「FALSE」になります。それは「厳しい関所」のようなもので「パスポートを持っている」かつ「チケットを持っている」場合のみ通れます。どちらか片方でも忘れたら通れません。
書式
=AND(論理式1, 論理式2, …)
単体での動作例:
A1=100, B1=50 のとき
=AND(A1=100, B1=50) → TRUE
=AND(A1=100, B1=30) → FALSE (B1が違うため)
IF関数との組み合わせ
実務において、AND関数を単体で使うことは稀です。大方IF関数の「論理式」の中で使われます。
構造
=IF(AND(条件A, 条件B), 真の場合, 偽の場合)
例1:「英語が70点以上」かつ「数学が70点以上」なら合格、それ以外は不合格とする場合(Excel)。
セルA1:英語の点数
セルB1:数学の点数
=IF(AND(A1>=70, B1>=70), “合格”, “不合格”)
Excelはまず AND(A1>=70, B1>=70) を判定します。
両方クリアしていれば TRUE となり、「合格」が表示されます。
片方でも70点未満なら FALSE となり、「不合格」が表示されます。
例2:「年齢が20歳以上、かつ60歳未満」の人を対象にする場合(Excel)。
セルA1:年齢
=IF(AND(A1>=20, A1<60), “対象”, “対象外”)
数学では 20 <= A1 < 60 と書きますが、Excelや多くのプログラムではこの書き方ができません。そのため、「20以上」と「60未満」をANDで繋ぐ必要があります。
プログラミングでのAND
プログラミング言語でも考え方は全く同じですが、記号が使われることが多いです。
Excel: AND(A, B)
Python / SQL: A and B
JavaScript / C# / Java: A && B
JavaScript
if (english >= 70 && math >= 70) {
console.log("合格");
}
AND関数は、「条件を厳しく絞り込みたいとき」にIF関数の中に入れて使います。
IF = 条件分岐の司令塔
AND = 複数の条件を束ねるロープ
OR関数
AND関数が「すべての条件を満たす必要がある(厳しい)」のに対し、OR(オア)関数は「どれか一つでも条件を満たせばOK(優しい)」という役割を持ちます。「または(or)」という言葉通り、選択肢の幅を広げるための関数です。
OR関数の基本
OR関数は、指定した条件のうち、少なくとも1つが「真(TRUE)」であれば、「TRUE」を返す関数です。すべての条件が「偽(FALSE)」だった場合のみ、「FALSE」になります。「割引」のようなもので「学生である」または「シニアである」または「会員である」場合、どれか一つでも当てはまれば割引が適用されます。
書式
=OR(論理式1, 論理式2, …)
単体での動作例:
A1=100, B1=50 のとき
=OR(A1=100, B1=50) → TRUE (両方合っているからOK)
=OR(A1=100, B1=0) → TRUE (A1が合っているからOK)
=OR(A1=0, B1=0) → FALSE (どちらも違うのでNG)
IF関数との組み合わせ
OR関数もAND関数と同様、IF関数の「論理式」の中に入れて使うのが定石です。
構造
=IF( OR(条件A, 条件B), 真の場合, 偽の場合)
例1:「土曜日」または「日曜日」なら「休日」、それ以外は「平日」と表示する場合(Excel)。
セルA1:曜日(文字列)
=IF(OR(A1=”土”, A1=”日”), “休日”, “平日”)
Excelは A1="土" か A1="日" のどちらかが正しいかチェックします。
どちらか一方でも正しければ TRUE となり、「休日」を表示します。
月曜〜金曜の場合は、どちらの条件も満たさないため FALSE となり、「平日」になります。
例2:「国語が30点未満」または「数学が30点未満」の人は「追試」とする場合(赤点が1つでもあったらアウト)。
セルA1:国語の点数
セルB1:数学の点数
=IF(OR(A1<30, B1<30), “追試”, “合格”)
AND関数の時とは逆の発想です。「悪い条件」をORでつなぐことで、「どれか一つでも失敗したらNG」というアラート(警告)を作る際によく使われます。
AND関数とOR関数の「混ぜ合わせ」
構造
=AND(条件A, OR(条件B, 条件C))
例3:キャンペーン適用
条件:「会員である(A1=”会員”)」かつ、「購入額が5000円以上(B1>=5000) または クーポンあり(C1=”あり”)」
=IF(AND(A1=”会員”, OR(B1>=5000, C1=”あり”)), “割引”, “通常”)
まず「会員である」ことは絶対条件です。
その上で、「5000円以上買う」か「クーポンを持っている」かのどちらかをクリアしていれば、割引になります。
プログラミング言語におけるOR
記号が縦棒(パイプライン)で表現されることが多いのが特徴です。
Excel: OR(A, B)
Python / SQL: A or B
JavaScript / C# / Java: A || B (縦棒2本)
Python
if day == "土" or day == "日":
print("休日")
IF: もし〜なら(分岐)
AND: 且つ(厳密な条件)
OR: または(緩やかな条件・選択肢)
IFERROR関数
Excelで計算をしていると、以下のような「エラー表示」が出ることがあります。
・#DIV/0! (割り算で分母が0)
・#N/A (検索したデータが見つからない)
・#VALUE! (計算できない文字が含まれている)
これらが表示されたままだと見た目が汚くなったりします。
IFERROR関数は「もしエラーが出たら、エラー表示の代わりに〇〇を表示する」という指示を出すための関数です。
基本構造
構造は非常にシンプルで、計算式をこの関数で「包む」イメージです。
=IFERROR(値, エラーの場合の値)
| 要素 | 説明 |
| ① 値 | 普段通りの数式(計算式やVLOOKUPなど) |
| ② エラーの場合の値 | エラーが出た時に代わりに表示したい文字や数値 |
「①をやってみて。成功したらその結果を表示して。もし失敗(エラー)したら、代わりに②を表示して」
具体的な使用例
例1,割り算のエラー(#DIV/0!)を消す
「売上 ÷ 個数」で単価を出したいが、個数が「0」や「空欄」のデータがあると #DIV/0! エラーになります。
A1:売上 (1000)
B1:個数 (0)
通常の数式:
=A1/B1 → #DIV/0!
IFERRORを使用(Excel):
=IFERROR(A1/B1, 0)
または、ハイフンで見せたい場合:
=IFERROR(A1/B1, “-“)
エラー表示ではなく「0」や「-」が表示され、表が綺麗になります。
例2、VLOOKUPで「該当なし」を表示する(#N/A対策)
商品IDで検索して、リストにない場合に #N/A(Not Available)が出るのを防ぎます。
通常の数式:
=VLOOKUP(A2, D:E, 2, FALSE) → データがないと #N/A
IFERRORを使用Excelxcel):=
IFERROR(VLOOKUP(A2, D:E, 2, FALSE), “該当なし”)
データが見つからない場合、「該当なし」と親切なメッセージが表示されます。
IF関数との関係
IFERROR関数はExcel 2007から登場した関数です。それ以前は、以下のようにIF関数とISERROR関数(エラーかどうか判定する関数)を組み合わせて書いていました。
昔の書き方(Excel):
=IF(ISERROR(A1/B1), 0, A1/B1)
「もしA1/B1がエラーなら0、そうでなければA1/B1を計算せよ」という書き方です。
例外処理
プログラミングでは、この考え方を「例外処理(Exception Handling)」と呼びます。プログラムが予期せぬエラーで停止(クラッシュ)しないように、「もしエラーが起きても、こうやって対処して処理を続けてね」という命令を書きます。
Pythonの例(try-except構文):
try:
result = 100 / 0 # エラーが起きそうな処理
print(result)
except ZeroDivisionError:
print("エラー:0では割れません") # エラー時の処理
IFERROR関数と同じで、「トライして、ダメなら別の処理をする」という構造になっています。
集計(SUM,SUMIF,SUMIFS)
SUM関数
「いかに速く、正確に、メンテナンスしやすく足すか」
SUM関数は、指定したセル範囲に含まれる数値をすべて合計します。数学の記号 Σ(シグマ)が由来です。
=SUM(数値1, [数値2], …)
「A1からA10までを全部足す」という書き方がメインです(Excel)。
=SUM(A1:A10)
コロン( : )の意味: 「〜から〜まで」という範囲を表します。
カンマ (, )の意味: 「と」という区切りを表します。
例:=SUM(A1, B5, C10) → A1とB5とC10(飛び地)を足す。
なぜ「+(プラス記号)」ではなく「SUM」を使うのか?
「=A1+A2+A3…」と手打ちで足すのと、SUM関数には決定的な違いが2つあります。
① 文字列を無視してくれる(エラー回避)
+ の場合は計算範囲に文字が含まれていると #VALUE! エラーになります。SUMの場合文字が含まれていても、それを無視して(0とみなして)数値だけを計算してくれます。
② 行の追加・削除に強い
+ の場合、行を挿入したとき、数式を修正しないと新しい行が計算に含まれません。SUMの場合、範囲の内側に行を挿入すれば、自動的に範囲が拡大されます(例:A1:A10 の間に1行入れたら A1:A11 に自動修正される)。
ショートカットキー「オートSUM」
合計を出したいセルにカーソルを置き、Alt + Shift + = を押して Enter。これを「オートSUM(サム)」と呼びます。
| OS | ショートカットキー | 動作 |
| Windows | Alt + Shift + = | カーソルの上(または左)にある数値を自動認識してSUM関数を一瞬で挿入します。 |
| Mac | Command + Shift + T | 同上 |
串刺し集計(3D集計)
複数のシート(例:4月、5月、6月…)の同じセル(A1)を合計したい場合、1つずつクリックして足す必要はありません。
=SUM(開始シート名:終了シート名!セル番地)
例: 「4月シート」から「3月シート」までの、全ての「A1セル」を合計する(Excel)。
=SUM(‘4月:3月’!A1)
プログラミングにおけるSUM
プログラミング言語でも、配列(リスト)の中身を合計する処理は頻出です。
Pythonの例:
sales = [100, 200, 300]
total = sum(sales) # 結果は600
自分で「1つずつ足していくループ処理」を書かなくても、用意された関数(組み込み関数)を使うのが一般的です。
SUMIF
SUM関数が「全部まとめて足す」豪快な関数だとすれば、SUMIF(サム・イフ)関数は「特定の条件に合うものだけを選り分けて足す」。
SUMIF関数は3つの要素(引数)で構成されています。「どこから?」「何を探して?」「どこを足す?」という順序で指定します。
=SUMIF(範囲, 検索条件, [合計範囲])
| 要素 | 説明 | イメージ |
| ① 範囲 | 条件を探す場所(検索エリア) | 「商品名」の列 |
| ② 検索条件 | 探したいキーワードや条件 | 「”りんご”」や「”>=1000″」 |
| ③ 合計範囲 | 実際に数値を足す場所(計算エリア) | 「売上金額」の列 |
③の「合計範囲」を省略すると、①の「範囲」にある数値が合計されます(条件も数値の場合など)。しかし、基本的には①と③は別の列を指定することが多いです。
使用例
| A(商品) | B(担当) | C(売上) | |
| 1 | りんご | 佐藤 | 100 |
| 2 | みかん | 鈴木 | 200 |
| 3 | りんご | 高橋 | 150 |
| 4 | バナナ | 佐藤 | 300 |
ケース①:「りんご」の売上だけ合計したい(Excel)
「A列の中から”りんご”を探して、対応するC列の金額を足す」という指示になります。
=SUMIF(A1:A4, “りんご”, C1:C4)
計算: 100 (A1) + 150 (A3) = 250
ケース②:「担当者別」の売上を計算する(Excel)
セルE1に「佐藤」と入力しておき、それを条件にする(セル参照)のが実務的な使い方です。
=SUMIF(B1:B4, E1, C1:C4)
E1が「佐藤」なら、100 + 300 = 400 になります。
条件指定のバリエーション(Excel)
単に文字が一致するかだけでなく、記号を使うことで幅広く集計できます。
数値の大小で集計(比較演算子)
「1000円以上の売上だけ合計したい」場合:
=SUMIF(C:C, “>=1000”, C:C)
条件はダブルクォーテーション " で囲む必要があります。
あいまい検索(ワイルドカード)
「”東京”で始まる店舗の売上」などを集計したい場合(Excel):
* (アスタリスク):任意の文字列
? (クエスチョン):任意の1文字
=SUMIF(A:A, “東京*”, C:C)
これで「東京本店」「東京支店」などがすべてヒットします。
プログラミング的な思考
この処理をプログラム(Pythonなど)で書くと、「フィルター(選別)」と「集計」の2段階になります。
# Pythonのイメージ
data = [
{"item": "りんご", "price": 100},
{"item": "みかん", "price": 200},
{"item": "りんご", "price": 150}
]
# "りんご"だけ抽出して合計する
total = sum(d["price"] for d in data if d["item"] == "りんご")
SUMIF関数は、このループ処理と条件分岐をたった1行でやってくれているわけです。
SUMIFS関数
SUMIF関数が「条件が1つ」だったのに対し、SUMIFS(サム・イフス)関数は「条件が複数(2つ以上)ある」場合に使える、いわば「SUMIFの完全上位互換」とも言える関数です。ただし、SUMIFとは「書き順」が違うということがあります。
「Aであり、かつBであり、かつCである」データの数値を合計します(AND条件)。
SUMIF: 「りんご」の売上合計
SUMIFS: 「りんご」で、かつ「東京店」で、かつ「1月」の売上合計
このように、データを多角的に絞り込んで集計できます。
ここが最も重要です。SUMIF関数とSUMIFS関数では、「合計したい範囲」を書く場所が逆になります。
SUMIF(古い方):=SUMIF(検索範囲, 条件, 合計範囲)→ 最後に「合計範囲」が来る。
SUMIFS(新しい方):=SUMIFS(合計範囲, 条件範囲1, 条件1, [条件範囲2, 条件2], …)→ 最初に「合計範囲」が来る。SUMIFSは条件をいくつでも追加できる仕様(可変長)だからです。後ろにどんどん条件を足していくため、最初に「どこを足すの?」という結論(合計範囲)を固定しておく必要があるのです。
使用例
| A(日付) | B(商品) | C(店舗) | D(金額) | |
| 1 | 4/1 | りんご | 東京 | 100 |
| 2 | 4/1 | みかん | 東京 | 200 |
| 3 | 4/2 | りんご | 大阪 | 150 |
| 4 | 4/2 | りんご | 東京 | 300 |
4月2日以降の、東京店の、りんごの売上は?
条件は以下の3つです。
1.日付(A列)が 4/2 以上
2.店舗(C列)が 東京
3.商品(B列)が りんご
数式の組み立て(Excel):
=SUMIFS(D:D, A:A, “>=4/2”, C:C, “東京”, B:B, “りんご”)
①D:D → まず「金額(D列)」を合計すると宣言。
②A:A, “>=4/2” → A列を見て、4/2以降のものに絞る。
③C:C, “東京” → さらにC列を見て、東京のものに絞る。
④B:B, “りんご” → さらにB列を見て、りんごのものに絞る。
⑤結果:行4のデータ(300)だけが残り、合計は 300 となります。
ミスと対策
範囲のズレ
合計範囲と条件範囲は、必ず同じ高さ(行数)でなければなりません。
NG:=SUMIFS(D1:D100, A1:A105, "条件")
D列は100行、A列は105行。ズレているためエラー(#VALUE!)になります。
対策として 列全体(D:D や A:A)を指定するとズレが起きないのでおすすめです。
OR条件(または)は使えない
SUMIFSは「すべて満たす(AND)」場合のみ機能します。「りんご または みかん」を合計したい場合、SUMIFS単体ではできません。対策としてSUMIFSを2回作って足し算します。
=SUMIFS(…, “りんご”) + SUMIFS(…, “みかん”)
これからは全部SUMIFSを使ってください。
理由:
・SUMIFSは「条件が1つだけ」の場合でも問題なく動く。
・後から「やっぱり条件を追加したい」となった時、SUMIFSなら後ろに書き足すだけで済む(SUMIFだと数式全体を書き直す必要がある)。
・引数の順番(合計範囲が最初)に慣れておいたほうが、他の関数(AVERAGEIFSなど)に応用が効く
数える(COUNT,COUNTA,COUNT BLANK,COUNTIFS)
COUNT関数とCOUNTA関数
COUNT(カウント)関数と、実務でその対(つい)となる関数COUNTA(カウント・エー)関数。
COUNT関数は、指定した範囲の中に「数値(数字)」が入っているセルがいくつあるかを数えます。
=COUNT(範囲)
COUNT関数は、「文字(テキスト)」を数えません。名前、住所、「出席」などの文字が入ったセルは、たとえデータが入っていても「0」として無視されます。
具体例1(Excel)
| A(氏名) | B(点数) | |
| 1 | 佐藤 | 100 |
| 2 | 鈴木 | (空白) |
| 3 | 田中 | 欠席 |
| 4 | 山田 | 80 |
=COUNT(B1:B4)
結果: 2
「100」と「80」の2つだけが数値だからです。「(空白)」と「欠席(文字)」は無視されます。※「テストを受けた(点数がある)人数」を知りたい時に便利です。
COUNTA関数
COUNTA(カウント・エー)は、「Count All(すべて数える)」や「Count Alphabet(文字も数える)」と覚えましょう。
=COUNTA(範囲)
「空白(完全な空っぽ)」以外のセルをすべて数えます。数字、文字、日付、数式の結果、エラー表示など、何かが入っていれば「1」とカウントします。
具体例1の表参照(Excel)
=COUNTA(A1:A4)
結果: 4
A列には全員の名前(文字)が入っているため、すべてのセルがカウントされます。※「名簿に登録されている総人数」を知りたい時に使います。
| 関数 | 何を数える? | 得意なシーン | 苦手なもの |
| COUNT | 数値のみ | テスト受験者数、売上が発生した日数 | 名前、文字列、「○×」などの記号 |
| COUNTA | 空白以外すべて | 名簿の人数、アンケート回答数、商品アイテム数 | 完全な空白セル |
人数(名前)を数えたい → COUNTA
金額や点数が入っている箇所を数えたい → COUNT
多くのプログラミング言語でも、配列(リスト)の長さを測る関数があります。
・Excel: COUNTA(range)
・Python: len(list)
・JavaScript: array.length
ExcelのCOUNTAは、プログラミングでいう len() (長さ、個数取得)に相当する最も基本的な操作です。
COUNTBLANK関数
COUNT(数値のみ)、COUNTA(空白以外すべて)、COUNTBLANK(カウント・ブランク)関数「空白(空っぽ)」のセルだけを数えるための関数です。「入力漏れのチェック」や「データの欠損確認」という、品質管理の要として活躍します。
調べたい範囲を指定するだけです。
=COUNTBLANK(範囲)
具体例:アンケートの未回答者を探す(Excel)
| A(氏名) | B(回答) | |
| 1 | 佐藤 | 満足 |
| 2 | 鈴木 | (空白) |
| 3 | 田中 | 普通 |
| 4 | 山田 | (空白) |
=COUNTBLANK(B1:B4)
結果: 2
鈴木さんと山田さんのセルが空っぽなので、2件とカウントされます。
人間の目には「空白」に見えても、Excelにとっては「空白ではない」場合があります。
スペース(空白文字)が入っている場合
誰かが間違ってキーボードの「スペースキー」を押してしまったセル。
・見た目:空白に見える
・Excelの認識:「スペースという文字が入っている」
・COUNTBLANKの結果:数えない(0になる)
対策として、データをもらった時は、削除機能(置換など)を使って余計なスペースを消しておく。
数式の結果が ""(空文字)の場合
IF関数などで「条件に合わなければ空白にする("")」という処理をしたセル。
・見た目:空白に見える
・中身:数式が入っている
・COUNTBLANKの結果:数える(空白として扱う)
COUNTBLANK関数は、数式によって作られた「見せかけの空白」は、ちゃんと「空白」としてカウントしてくれます。これは非常に便利です。
入力完了チェッカーを作る(Excel)
例: A1からA5までの5つのセルが必須項目だとします。
=IF(COUNTBLANK(A1:A5)=0, “入力完了”, “未入力あり”)
①COUNTBLANK(A1:A5) で空白の数を数える。
②もし結果が 0 なら(=空白が一つもなければ)、「入力完了」と表示。
③そうでなければ(1つでも空白があれば)、「未入力あり」と警告を出す。
| 関数名 | 役割 | 対象 | 数式の戻り値 “” | スペース文字 ” “ |
| COUNT | 数値カウント | 数値のみ | × 数えない | × 数えない |
| COUNTA | データ有りカウント | 文字・数値など | 〇 数える | 〇 数える |
| COUNTBLANK | 空白カウント | 空白 | 〇 数える | × 数えない |
COUNTBLANK関数は、「データの穴を探す」ための関数です。( リストの入力漏れチェック、空席のカウントなど)
COUNTIFS関数
SUMIFS関数が「複数条件の合計」だったのに対し、COUNTIFS関数は「複数条件に合致する件数(個数)を数える」ための関数です。データ分析ツールの一つです。
基本構造:「探す場所」と「探す条件」をペアにして並べていく。
=COUNTIFS(条件範囲1, 条件1, [条件範囲2, 条件2], …)
SUMIFSの時にあった「合計範囲(最初に書くやつ)」がありません。なぜなら、COUNTIFSは「条件に合った行数」を数えるだけなので、「数値を足す場所」を指定する必要がないからです。
具体的な使用例
以下の「顧客リスト」を例にします(Excel)。
| A(氏名) | B(性別) | C(年齢) | D(地域) | |
| 1 | 佐藤 | 男 | 25 | 東京 |
| 2 | 鈴木 | 女 | 30 | 大阪 |
| 3 | 高橋 | 男 | 45 | 東京 |
| 4 | 田中 | 女 | 22 | 東京 |
「東京」に住む「男性」は何人?
条件は2つです。
・地域(D列)が「東京」
・性別(B列)が「男」
=COUNTIFS(D:D, “東京”, B:B, “男”)
結果: 2 (佐藤さんと高橋さん)
・D:D, "東京" → まず東京の人を探す。
・B:B, "男" → その中でさらに男の人を探す。
「30歳以上」の「女性」は何人?
条件に不等号(以上、以下)を使うパターンです。
=COUNTIFS(C:C, “>=30”, B:B, “女”)
結果: 1 (鈴木さん)
・C:C, ">=30" → 年齢が30以上の人。
・B:B, "女" → その中で女性。
条件の書き方
COUNTIFSを使いこなすには、ダブルクォーテーション " の中の書き方が重要です。
| 書き方 | 意味 | 例 |
"東京" | 完全一致 | 東京だけ数える |
">=20" | 以上 | 20を含む、それより大きい |
"<20" | 未満 | 20を含まない、それより小さい |
"<>東京" | 〜以外(否定) | 東京ではない人を数える |
"*県" | ワイルドカード | ○○県(神奈川県、埼玉県など)を数える |
<>(ノットイコール)
「キャンセル以外」や「退会者以外」を数える時に、この <> が非常によく使われます。
日付の期間で数える
「4月1日から4月30日までの件数」を知りたい場面が多々あります。これは、数学的に言うと「4/1以上、かつ、4/30以下」という2つの条件で表現します。
例:A列に日付が入っている場合(Excel)
=COUNTIFS(A:A, “>=4/1”, A:A, “<=4/30”)
同じ「A列」を2回指定して、期間を挟み撃ちにするのがコツです。
条件が1つだけでも最初からCOUNTIFSを使うことが推奨されます。
COUNTIF: =COUNTIF(範囲, 条件)
COUNTIFS: =COUNTIFS(範囲, 条件)
条件が1つの場合、書き方は全く同じです。「S」がついているかどうかの違いだけです。後から「やっぱり条件を増やしたい(男性だけに絞りたい)」となった時、COUNTIFSで書いておけば、後ろにカンマで書き足すだけで済みます。
探す(VLOOKUP,XLOOKUP)
VLOOKUP関数
VLOOKUP(ブイ・ルックアップ)の「V」はVertical(垂直)のVです。「縦に探して、横のデータを取ってくる」という動きをします。
基本構造:4つの引数(ひきすう)
VLOOKUPは、指定すべき要素が4つあります。
=VLOOKUP(検索値, 範囲, 列番号, [検索の型])
| 順番 | 要素 | 日本語訳 | 意味 |
| ① | 検索値 | 何を探す? | 「このID(A1セル)を探して!」 |
| ② | 範囲 | どこから? | 「この別表(マスターデータ)の中から探して!」 |
| ③ | 列番号 | 何列目? | 「見つけたら、表の左から◯列目のデータを頂戴!」 |
| ④ | 検索の型 | 一致方法は? | 「完全一致(FALSE)で頼む!」 |
使用例
「商品ID」を入力すると、別にある「商品リスト」から「商品名」を自動で表示させるケースです。(Excel)
▼ 作りたい表(請求書など:A列〜C列にあるとする)
| A(ID)入力 | B(商品名) | C(列一つ空ける) |
| A001 | =VLOOKUP(A1, D:F, 2, FALSE) |
▼ 参照する別表(商品リスト:D列〜F列にあるとする)
| D(ID) | E(商品名) | F(単価) |
| A001 | りんご | 100 |
| A002 | みかん | 200 |
数式(セルB1に入れる)
1,A1(A001) を探して。
2,D列からF列 のエリアの中で(※必ず探すキーが一番左の列にあること)。
3,見つかったら、左から数えて 2列目(商品名の列) のデータを取ってきて。
4,FALSE(IDが完全に一致するものだけ探して)。
→ 結果:「りんご」 が表示されます。
検索の型
VLOOKUP関数の第4引数(検索の型)には、以下の2種類があります。
・TRUE(または省略):近似一致(近い値を探す)
・FALSE(または0):完全一致(全く同じものを探す)
データの99%(ID検索、名前検索など)では、必ず「FALSE」を使います。これを省略してTRUEにしてしまうと、似たようなIDを勝手に拾ってきてしまい、誤発注や請求ミスの原因になります。※慣れている人は FALSE と打つのが面倒なので、同じ意味である数字の 0 を使って =VLOOKUP(A1, D:F, 2, 0) と書きます。
エラーと対策
VLOOKUPを使っていると、以下のエラーによく遭遇します。
#N/A(ノー・アサイン)
意味:「見つからない(Not Available)」
原因:そのIDがリストに存在しない、またはスペースが入っていて一致していない。
対策:リストを確認するか、以前学んだ IFERROR関数 で包んで消します。
=IFERROR(VLOOKUP(…), “登録なし”)
#REF!(リファレンス)
意味:「参照先がおかしい」
原因:指定した「列番号」が範囲の外にある(例:3列しかない表なのに「5列目を取ってこい」と命令した)。
VLOOKUPの弱点
「検索するキー(IDなど)は、必ず表の一番左になければならない」というルールです。「IDの左側にある列」を取ってくることはできません。
XLOOKUP関数
直感的になり、壊れにくくなった。
| 特徴 | VLOOKUP (旧) | XLOOKUP (新) |
| 探す方向 | 右側しか取れない | 左右どちらでもOK |
| 列の指定 | 「3列目」と数える | 「C列」と選ぶだけ |
| 一致モード | FALSEと書かないと危険 | 最初から「完全一致」 |
| エラー処理 | IFERRORが必要 | 関数の中に内蔵 |
| 行の挿入 | 列番号がズレてエラーになる | ズレても自動修正される |
基本構造:3つ選ぶ
VLOOKUPよりも引数(設定項目)の考え方がシンプルです。
=XLOOKUP(検索値, 検索範囲, 戻り範囲, [見つからない場合], …)
最低限必要なのは、最初の3つだけです。
・検索値:何を探す?(IDなど)
・検索範囲:どこから探す?(IDの列)
・戻り範囲:何を持ってくる?(商品名の列)
「このIDを、この列(検索範囲)から探して、同じ行にあるあの列(戻り範囲)のデータをちょうだい」
具体的な使用例(Excel)
VLOOKUPではできなかった「左側のデータを取ってくる」例で見てみましょう。(商品名から、左にあるIDを探すケース)
| A(ID) | B(商品名) | C(単価) | |
| 1 | A001 | りんご | 100 |
| 2 | A002 | みかん | 200 |
「みかん」のID(A列)を知りたい場合
=XLOOKUP(“みかん”, B:B, A:A)
①"みかん" を探して。
②B:B (商品名の列)の中から。
③A:A (IDの列)のデータを返して。
結果: A002
VLOOKUPだと「IDが左にないとダメ」というルールがあったため、これをするには表を作り直す必要がありましたが、XLOOKUPなら一発です。
オプション機能
XLOOKUPには、第4引数以降に便利な機能がついています。(Excel)
エラー時のメッセージ(IFERROR不要!)
「データが見つからなかったらどうするか」を、4番目に書くだけで設定できます。
=XLOOKUP(E1, A:A, B:B, “該当なし”)
もしE1のデータが見つからなければ、エラー(#N/A)ではなく「該当なし」と表示されます。もうIFERROR関数で包む必要はありません。
整える(TEXTと日付・文字操作関数)
TEXT関数
VLOOKUPやSUMIFSが集計・分析だとしたら、今回の関数はデータの整形にあたります。ここが雑だと、正しい分析結果は作れません。
TEXT(テキスト)関数は、数値や日付のデータに対して、「表示形式(見た目)」を指定して文字列に変換する関数です。「日付から『曜日』だけ取り出したい」「数字を『001』のような3桁コードにしたい」といった場面です。
基本構造
=TEXT(値, “表示形式”)
| 引数 | 説明 |
| 値 | 加工したい元のセル(日付や数値) |
| 表示形式 | どのような形にするかのコード(必ず " で囲む) |
日付から「曜日」を出す
A1セルに日付「2023/12/25」が入っているとします。
・=TEXT(A1, "aaa") → 月 (漢字1文字)
・=TEXT(A1, "aaaa") → 月曜日 (漢字フル)
・=TEXT(A1, "ddd") → Mon (英語短縮)
IDを揃える(0埋め)
「1」を「001」、「20」を「020」のように桁数を揃えたい場合。
=TEXT(A1, "000")
・1 → 001
・12 → 012
・123 → 123
注意点
TEXT関数を使った結果は「数値」ではなく「文字(文字列)」になります。これを使って計算(足し算など)はできなくなるので注意してください。
DATEDIF関数と TODAY関数
TODAY(トゥデイ)関数
「今日の日付」を表示します。ファイルを開くたびに日付が更新されます。
=TODAY()
※カッコの中身は空っぽでOKです。
請求書の「発行日」や、進捗管理表でよく使われます。
DATEDIF(デイト・ディフ)関数
これはExcelのメニューに出てこない「隠し関数」です。「開始日」と「終了日」の間の期間を計算します。
=DATEDIF(開始日, 終了日, “単位”)
使用例:年齢計算や勤続年数
A1に「生年月日」、B1に「今日の日付(=TODAY())」があるとして、年齢を出す場合。
=DATEDIF(A1, B1, “Y”)
| 単位 | 意味 |
| “Y” | 年数 (Year) – 年齢、勤続年数 |
| “M” | 月数 (Month) – プロジェクト期間 |
| “D” | 日数 (Day) |
文字を切り取る関数(LEFT, MID, RIGHT)
「住所から県名だけ抜きたい」「商品コードから分類だけ抜きたい」という時に、文字を切り取る関数です。
| 関数名 | 役割 | 使い方 | 例(A1=”東京都港区”) |
| LEFT | 左から切り取る | =LEFT(文字, 文字数) | =LEFT(A1, 3) → 東京都 |
| MID | 途中から切り取る | =MID(文字, 開始位置, 文字数) | =MID(A1, 4, 2) → 港区 |
| RIGHT | 右から切り取る | =RIGHT(文字, 文字数) | =RIGHT(A1, 2) → 港区 |
&(アンパサンド)
関数ではありませんが、頻繁に使う演算子です。別々のセルの文字を合体させます。
例:苗字(A1)と名前(B1)をくっつけてフルネームにする(Excel)
=A1 & ” ” & B1
結果: 佐藤 太郎
間にスペース " " を挟む。
ダッシュボード(FILTER,SORT,SORTBY,UNIQUE)
FILTER関数
VLOOKUPやSUMIFSが「既存の機能の進化版」だとしたら、このFILTER関数はExcelの歴史を変えた「スピル機能」で、一言で言うと、「条件に合うデータを、ズラッと全部抜き出す」関数です。VLOOKUP関数では「最初の1件」しか持ってこれませんでしたが、FILTER関数なら「該当するもの全て」を瞬時にリスト化できます。
自動抽出
例えば、1000件の売上データから「東京支店」のデータだけを抜き出して別の表にしたい時、従来は、オートフィルタで絞り込んで、コピペ?ピボットテーブルを作る?FILTER関数を使えば、「東京」と指定するだけで、データが自動的に抽出され、元データが増えれば結果も勝手に更新されます。
基本構造:3つの要素
=FILTER(配列, 含む, [空の場合])
| 要素 | 説明 | 意味 |
| ① 配列 | 抜き出したい範囲 | 「この表全体から抜き出して!」 |
| ② 含む | 抽出する条件 | 「この列が”東京”である行だけを!」 |
| ③ 空の場合 | エラー回避 | 「もし1件もなかったら”該当なし”って出して」 |
使用例(Excel)
以下の「売上リスト」から、「東京」のデータだけを抜き出します。
| A(日付) | B(店舗) | C(金額) | |
| 1 | 4/1 | 東京 | 100 |
| 2 | 4/2 | 大阪 | 200 |
| 3 | 4/3 | 東京 | 300 |
数式(セルE1):
=FILTER(A1:C3, B1:B3=”東京”, “なし”)
結果:セルE1に数式を入れただけで、隣のセル(F列、G列)や下の行にも自動的にデータが溢れ出します。(これをスピル機能と呼びます)
| D | E | F | G |
| 1 | 4/1 | 東京 | 100 |
| 2 | 4/3 | 東京 | 300 |
複数条件(AND/OR)
FILTER関数で「かつ(AND)」や「または(OR)」を使う時は、AND/OR関数ではなく「算数(掛け算・足し算)」を使います。(Excel)
「かつ(AND)」は「 *(掛け算)」
「東京」店舗、かつ、金額が「200以上」のデータ。
=FILTER(A:C, (B:B=”東京”) * (C:C>=200), “なし”)
コンピュータの世界では TRUE=1, FALSE=0 です。「1 × 1」の時だけ「1(対象)」になります。
「または(OR)」は「 +(足し算)」
「東京」店舗、または、「大阪」店舗のデータ。(Excel)
=FILTER(A:C, (B:B=”東京”) + (B:B=”大阪”), “なし”)
スピルエラー(#SPILL!)
FILTER関数は、結果を表示するために周囲のセルを自動的に使います。もし、結果を表示しようとした場所に、既に文字が入っていたりデータがあると、場所が確保できずにエラーになります。
エラー表示: #SPILL!
対策として 結果が出る範囲のセルを空っぽ(Delete)にしてください。
SORT関数とSORTBY関数
これまで、データの並べ替えをするには、毎回メニューの「データ」タブから「並べ替え」ボタンを押す必要がありました。しかし、SORT関数を使えば、元データが変更されるたびに、自動的に並び順が変わるランキング表などを作り「表のメンテナンス作業」をゼロにする関数です。
全自動並べ替えマシーン
元データ(入力用)はそのままで、別の場所に「きれいに並べ替えられた表(閲覧用)」を表示するのが役割です。
従来: 新しい売上が入るたびに、範囲選択して「降順」ボタンを押す。
SORT関数: データが増えても、数字が変わっても、勝手にランキングが更新される。
基本構造
=SORT(範囲, [基準列], [順序], [方向])
| 引数 | 説明 | 設定値 |
| ① 範囲 | 並べ替えたいデータ全体 | A2:C10 など |
| ② 基準列 | 何列目を基準にするか | 左から数えて 1 や 3 など |
| ③ 順序 | 小さい順か、大きい順か | 1 = 昇順 (A→Z, 1→10) -1 = 降順 (Z→A, 10→1) |
| ④ 方向 | (通常は省略) | 省略またはFALSEで行方向(縦)に並べ替え |
使用例(Excel)
以下のテスト結果表を並べ替えます。
| A(氏名) | B(クラス) | C(点数) | |
| 1 | 佐藤 | A | 70 |
| 2 | 鈴木 | B | 90 |
| 3 | 高橋 | A | 60 |
点数(3列目)が高い順(降順)に並べる
ランキング表を作りたい時の鉄板パターンです。
=SORT(A1:C3, 3, -1)
①A1:C3 のデータを。
②3 列目(点数)を見て。
③-1 (降順=大きい順)に並べ替えて。
結果: 鈴木(90) → 佐藤(70) → 高橋(60) の順に表示されます。
氏名(1列目)であいうえお順(昇順)に並べる
名簿整理などで使います。
=SORT(A1:C3, 1, 1)
基準列を 1、順序を 1(昇順)にします。
FILTER × SORT
SORT関数単体よりも、FILTER関数との「入れ子(ネスト)」で使うことが非常に多いです。「クラスAの人だけ抜き出して(FILTER)、点数が高い順に並べる(SORT)」(Excel)
=SORT( FILTER(範囲, 条件), 基準列, 順序 \ )
=SORT(FILTER(A1:C3, B1:B3=”A”), 3, -1)
①まず内側の FILTER が実行され、クラスAのデータだけが抽出されます。
②その抽出された結果を、外側の SORT が受け取り、3列目(点数)で並べ替えます。
数式一本で動的なダッシュボードが完成します。
SORTBY関数
SORT関数には、少し高機能なSORTBY(ソート・バイ)関数がいます。
「クラス順に並べて、さらにその中で点数順に並べる」といった「優先順位のある並べ替え」をしたい時に使います。(Excel)
=SORTBY(範囲, 基準列1, 順序1, 基準列2, 順序2, …)
例:クラス(昇順)ごとに、点数が高い順(降順)
=SORTBY(A1:C3, B1:B3, 1, C1:C3, -1)
SORT関数よりも直感的(列番号ではなく範囲を指定する)です。
UNIQUE関数
UNIQUE(ユニーク)関数は、「重複(カブり)を取り除いて、一つにまとめる」ことです。これまでメニューバーの「データ」→「重複の削除」ボタンを押して行っていた作業が、全自動かつリアルタイムに行えるようになり「データのカタログ化」を行う関数です。
自動リスト作成機
大量の売上データ(数千行)の中に、「商品名」が何度も登場するとします。そこから「商品マスタ(商品の一覧表)」を作りたい時に使います。
元データ: りんご, みかん, りんご, バナナ, みかん, りんご…
UNIQUE関数: りんご, みかん, バナナ (各1回ずつ表示)
元データに新商品「ぶどう」が追加されれば、UNIQUE関数の結果にも自動で「ぶどう」が追加されます。
基本構造
一番シンプルな使い方は、範囲を指定するだけです。
=UNIQUE(配列, [列の比較], [回数指定])
| 引数 | 説明 | 設定 |
| ① 配列 | 元データの範囲 | A2:A100 など |
| ② 列の比較 | (通常は省略) | 省略またはFALSEで行ごとの重複を確認 |
| ③ 回数指定 | (通常は省略) | 省略またはFALSEで「1回でも出たもの」を表示 |
③については、第3引数を TRUE にすると、「重複していないデータ(1回しか登場しなかったレアなデータ)」だけを抜き出すこともできます。
使用例(Excel)
以下の「売上履歴」から、販売した「商品リスト」を作ります。
| A(日付) | B(商品名) | |
| 1 | 4/1 | りんご |
| 2 | 4/2 | みかん |
| 3 | 4/3 | りんご |
| 4 | 4/4 | バナナ |
基本形:重複なしリストを作る
セルD1に入力します。
=UNIQUE(B1:B4)
結果:
・りんご
・みかん
・バナナ(※3行目の「りんご」は重複しているので消えます)
SORT × UNIQUE
UNIQUE関数でリストを作ると、出現順(りんご→みかん…)に並びます。これを「あいうえお順」にしたい場合、SORT関数 で包み込みます。(Excel)
=SORT(UNIQUE(B1:B4))
①まず UNIQUE で重複を消す。
②その結果を SORT が受け取って並べ替える。
③「きれいに整列された商品リスト」 が完成。
種類の数を数える
「商品は何種類売れたの?」と聞かれた時、UNIQUE関数を COUNTA関数(数を数える)で包むだけでOKです。(Excel)
=COUNTA( UNIQUE(範囲) )
=COUNTA(UNIQUE(B1:B4))
UNIQUEの結果が「りんご、みかん、バナナ」の3つになるので、それをCOUNTAが数えて「3」と返します。
スピル範囲演算子「#」の活用
UNIQUE関数で作ったリストを、さらに別の計算(SUMIFSなど)や「プルダウンリスト(入力規則)」に使いたい場合、「#(シャープ)」という記号が役立ちます。
もし D1 セルに =UNIQUE(…) が入っているなら、D1 と指定すると「D1セルだけ」ですが、D1# と指定すると「UNIQUE関数で溢れ出た(スピルした)範囲すべて」を指すことができます。
例: =SUM(D1#) → リストに出ている全商品の合計を一発で出す。
データのお掃除(TRIM,SUBSTITUTE,CLEAN)
TRIM関数
FILTERやUNIQUEなどの高度な関数も、元データが汚れていれば、正しい結果を出しません。TRIM(トリム)関数は、データの「余計な空白(スペース)」をきれいに掃除してくれます。システムからダウンロードしたデータや、Webからコピペしたデータを使う前には、この関数を通すことを推奨します。
3つの掃除機能
TRIM関数は、単にスペースを消すだけではありません。
=TRIM(文字列)
この関数が行う処理は以下の3点です。
①先頭のスペースを削除する(左側のゴミを取る)
②末尾のスペースを削除する(右側のゴミを取る)
③単語間のスペースは、1つだけ残して余分なものを削除する(整える)
具体例
| 元のデータ(あえて汚くしています) | TRIM関数の結果 | 解説 |
" 東京 " | "東京" | 前後のスペースを削除 |
"東京 都" | "東京 都" | 間のスペースを1つに短縮 |
" 東 京 " | "東 京" | 前後削除+間を1つに |
英語の文章(”I am a pen.”)などは、単語の間にスペースが必須です。TRIM関数はそれを理解しているので、間のスペースを全部消すのではなく、ちゃんと1つだけ残してくれます。
なぜTRIMが必要なのか?
Excelにとって、「A」と「A 」(後ろにスペースあり)は、全く別の文字です。これが原因で、以下のようなことがおきます。
VLOOKUPでエラーになる
検索値:「A001」
リスト:「A001 」(誰かが間違ってスペースキーを押していた)
結果:#N/A(見つかりません)
見た目は同じなのにエラーが出る場合、原因は99%これです。
UNIQUE関数で重複が消えない
データ:「東京」「東京 」「 東京」
結果: 「東京」「東京 」「 東京」と3つとも表示されてしまう。
スペースのせいで「別の言葉」だと判断されるためです。
TRIM関数の使い方
基本的には、隣の列に作業用の列を作って掃除します。(Excel)
A列(汚いデータ)をB列できれいにする場合:
=TRIM(A1)
これを下にオートフィル(コピー)すれば、B列にきれいなデータが出来上がります。その後、B列をコピーして、元の場所に「値の貼り付け」をしてデータを上書きするのが一般的な手順です。
SUBSTITUTE関数
すべてのスペースを消したい場合(Excel)
電話番号やIDなどで、「間のスペースも全部消して詰めたい」という場合があります。
(例:090 1234 5678 → 09012345678)
この場合、TRIM関数ではなく、SUBSTITUTE(サブスティチュート)関数を使います。
=SUBSTITUTE(A1, ” “, “”)
A1セルの中の " "(スペース)を、""(何もない)に置き換えろ(=削除しろ)。
| 関数 | 役割 | 結果の例 |
| TRIM | 文章として整える | 田中 太郎 (間は1つ残る) |
| SUBSTITUTE | 特定の文字を全消去 | 田中太郎 (間も消える) |
CLEAN関数
Webサイトからコピペしたデータの場合、TRIM関数でも消えない「頑固な空白」(文字コード160番の改行禁止スペースなど)や、目に見えない「改行コード」が混ざっていることがあります。その場合は、CLEAN(クリーン)関数と組み合わせます。
=TRIM(CLEAN(A1))
・CLEAN: 印刷できない文字(改行コードなど)を削除する。
・TRIM: 通常のスペースを削除する。
このセットを使えば、大抵は落ちます。
VLOOKUPでエラーが出た時、まず疑うべきは「余分なスペース」。
UNIQUEやSORTを使う前に、TRIMでデータをきれいにしておく。
間のスペースまで完全に消したい時は、SUBSTITUTEを使う。
これを習慣にすると、「なぜか集計が合わない…」という時間が劇的に減ります。
事例
〇〇(△△△)の〇〇を抽出
=LEFT(A1,FIND("(",A1)-1)
セルA1(例として)に入力されている文字列から、「左側にある文字」だけを抜き出し、「(」以降の補足情報を切り捨てることです。
例えば、商品リストや名簿などで以下のようなデータがある場合に威力を発揮します。
変換前 (A1): iPhone 15 (128GB)⇨変換後: iPhone 15
この数式は、2つの関数(LEFT と FIND)が連携して動いています。内側から順に見ていくのが理解の近道です。
①FIND("(",A1) 「区切り位置」の特定
まず、FIND関数が「カッコ ( が左から何文字目にあるか」を正確に探知します。
役割: 指定した文字の位置(数値)を返す。例: iPhone 15 (128GB) という文字の場合、「(」は 11文字目 にあります。
結果: この部分は 11 という数値に変わります。
②-1 「手前」への調整
次に、先ほど見つけた位置から 1 を引きます。そのままだと「(」まで含んで切り取ってしまうためです。「(」の 一つ手前 までが欲しいので、調整を行います。
計算: 11 - 1 = 10 「左から 10文字分 だけ必要」という命令書が出来上がります。
③ LEFT(A14, ...)「抽出」の実行
最後に、LEFT関数が動きます。
役割: 文字列の左端から、指定された文字数だけを抜き出す。
=LEFT("iPhone 15 (128GB)", 10) 結果: iPhone 15 (最後のスペース含む)
処理の流れを視覚化すると以下のようになります。
この数式には一つだけ弱点があります。それは、「セルの中に ( が存在しない場合、#VALUE! エラーになる」ということです。もし、データの中にカッコがあるものと無いものが混在している場合は、以下のようにIFERROR関数でラップ(包む)するのがベストプラクティスです。
強化版の数式:
=IFERROR(LEFT(A14,FIND(“(“,A14)-1), A14)
意味: もしエラーが出たら(カッコが見つからなかったら)、加工せずに元のA1をそのまま表示しなさい。
〇〇(△△△)の△△△を抽出
=MID(A1, FIND("(",A1)+1, FIND(")",A1)-FIND("(",A1)-1)
カッコの中身だけを、ピンポイントでくり抜く
1,全体の設計図:MID関数
MID は 「ここからスタートして、何文字分とってこい」 という命令を出します。=MID( 対象のセル , スタート位置 , 何文字取るか )
この数式は、この「スタート位置」と「何文字取るか」を自動計算するために、後ろの長い式を使っているのです。
例として、セルA1に Excel(関数) という文字が入っているとします。 この中から 関数 だけを取り出してみましょう。
①スタート位置の計算
FIND("(",A1)+1
FIND("(",A1): 左カッコ ( が何文字目にあるか探します。
Excel(関数) の場合、( は 6文字目 です。
+1: そのままだとカッコから始まってしまうので、プラス1 して「カッコの次の文字」をスタート地点にします。
結果:7文字目(「関」の字)からスタートせよ、という命令になります。
②文字数(長さ)の計算
ここがこの数式の最も数学的な部分です。
FIND(“)”,A1) – FIND(“(“,A1) – 1
「終わりの位置」から「始まりの位置」を引き算して、中身の長さを求めています。
FIND(")",A1): 閉じカッコ ) の位置は? ➔ 9文字目 FIND("(",A1): 開きカッコ ( の位置は? ➔ 6文字目 引き算: 9 - 6 = 3 この「3」は、「 (関数 」という範囲(カッコを含んだ距離)です。
-1: 開きカッコ自体の分を引きます。 3 - 1 = 2
結果:中身は 2文字(「関数」)と計算できました。なぜ最後に -1 をするのか、数直線で考えると分かりやすいです。位置9(閉じカッコ)位置6(開きカッコ)差 (9-6) = 3
この「3」という距離には、「関」「数」「)」の3文字が含まれてしまっています。本当に欲しいのは「関」「数」の2文字なので、最後の閉じカッコ分として 1を引く 必要があります。
ExcelがMicrosoft 365などであれば、この長い計算式はもう不要です。TEXTBETWEEN(テキストビトウィーン) という新しい関数が追加されているからです。
=TEXTBETWEEN(A1, "(", ")")
これだけで、全く同じ結果(カッコの中身の抽出)が得られます。