はじめに
表計算ソフトなどの関数と、プログラミング言語の関数
どちらの関数も、「ある入力(引数)をもとに、処理をして、結果を返す」という点では共通しています。 =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)
セルの中に入れる = から始まるのがルール。数字同士の計算や、関数を使った命令などが含まれます
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: または(緩やかな条件・選択肢)
事例
〇〇(△△△)の〇〇を抽出
=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, "(", ")")
これだけで、全く同じ結果(カッコの中身の抽出)が得られます。