Welcome to 1to1(いとい)   Click to listen highlighted text! Welcome to 1to1(いとい)

関数

はじめに

表計算ソフトなどの関数と、プログラミング言語の関数

どちらの関数も、「ある入力(引数)をもとに、処理をして、結果を返す」という点では共通しています。 =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平方和を求める
SUMX2PY22つの配列要素の平方和を合計する
SUMX2MY22つの配列要素の平方差を合計する
SUMXMY22つの配列要素の差の平方和を求める
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逆正接(アークタンジェント)を求める
ATAN2x-y座標から逆正接を求める
ACOT逆余接(アークコタンジェント)を求める
SINH双曲線正弦(ハイパボリックサイン)を求める
COSH双曲線余弦(ハイパボリックコサイン)を求める
TANH双曲線正接(ハイパボリックタンジェント)を求める
CSCH / SECH / COTH双曲線余割・正割・余接を求める
ASINH / ACOSH / ATANH / ACOTH逆双曲線関数を求める
MDETERM行列の行列式を求める
MINVERSE行列の逆行列を求める
MMULT2つの行列の積を求める
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指定した休日を除外して期日を求める
DAYS2つの日付から期間内の日数を求める
DAYS3601年を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.TESTZ検定を行う
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縦方向・横方向に検索する
LOOKUP1行または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株価や地理データの値を取り出す
RTDRTDサーバーからデータを取り出す
GROUPBYグループごとに集計する
PIVOTBYピボットテーブルのような集計表を作成
HYPERLINKハイパーリンクを作成する
IMAGE画像を表示する
ENCODEURLURLエンコードする
WEBSERVICEWebデータをダウンロードする
FILTERXMLXMLから情報を取り出す
データベース関数

表(リスト)形式のデータから条件抽出や集計を行う関数群です。

関数名機能概要
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 / DEC2HEX10進数を他進数に変換
BASE10進数をn進数に変換
BIN2OCT / BIN2DEC / BIN2HEX2進数を他進数に変換
OCT2BIN / OCT2DEC / OCT2HEX8進数を他進数に変換
HEX2BIN / HEX2OCT / HEX2DEC16進数を他進数に変換
DECIMALn進数を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引数を数値に変換する
PYPythonのプログラムを実行する
キューブ関数

分析用データ(キューブ)を操作する高度な関数群です。

関数名機能概要
CUBEMEMBERメンバーや組を返す
CUBEMEMBERPROPERTYメンバーのプロパティを求める
CUBESETセットを取り出す
CUBESETCOUNTセット内の項目数を求める
CUBEVALUE集計値を求める
CUBERANKEDMEMBER指定した順位のメンバーを求める
CUBEKPIMEMBERKPIのプロパティを返す

条件判断(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ショートカットキー動作
WindowsAlt + Shift + =カーソルの上(または左)にある数値を自動認識してSUM関数を一瞬で挿入します。
MacCommand + 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(金額)
14/1りんご東京100
24/1みかん東京200
34/2りんご大阪150
44/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:DA: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(単価)
1A001りんご100
2A002みかん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(金額)
14/1東京100
24/2大阪200
34/3東京300

数式(セルE1):
 =FILTER(A1:C3, B1:B3=”東京”, “なし”)
 結果:セルE1に数式を入れただけで、隣のセル(F列、G列)や下の行にも自動的にデータが溢れ出します。(これをスピル機能と呼びます)

DEFG
14/1東京100
24/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 など
② 基準列何列目を基準にするか左から数えて 13 など
③ 順序小さい順か、大きい順か1 = 昇順 (A→Z, 1→10)
-1 = 降順 (Z→A, 10→1)
④ 方向(通常は省略)省略またはFALSEで行方向(縦)に並べ替え

使用例(Excel)
 以下のテスト結果表を並べ替えます。

A(氏名)B(クラス)C(点数)
1佐藤A70
2鈴木B90
3高橋A60

 点数(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(商品名)
14/1りんご
24/2みかん
34/3りんご
44/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つの関数(LEFTFIND)が連携して動いています。内側から順に見ていくのが理解の近道です。
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, "(", ")")
これだけで、全く同じ結果(カッコの中身の抽出)が得られます。

抽出・開示

MWcをフォローする
Translate »
Click to listen highlighted text!