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)
 セルの中に入れる = から始まるのがルール。数字同士の計算や、関数を使った命令などが含まれます

条件判断(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行でやってくれているわけです。

SUMIF関数

 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!