Excel の数式基礎

明示してなければ Excel 2007 (Windows) で確認。

※ここでは数式についてのコメントを → で表現しています。実際には数式にこのようなかたちでコメントを記述することは出来ません。

リテラルと型

数式の中では数値はそのまま記述することができます。

=300 → 300
=3.14 → 3.14

文字列はダブルクォーテーション “ で囲みます。文字列中にダブルクォーテーション を含める場合は “” と記述します。

="文字" → 文字
="ダブルクォーテーション は""強調""や""引用""を意味する" → ダブルクォーテーション は"強調"や"引用"を意味する

数値と文字はある程度自動的に変換されます。

=1+"2" → 3 ※文字列が数値に変換される例
=FIND(2, "ABC123") → 5 ※数値が文字列に変換される例

ただし、後述の比較演算子やMATCHなどでは変換しないまま比較されるので、数値として扱うか文字として扱うかきっちり決めておいたほうが安全です。

=IF(1="1", "一致", "不一致") → 不一致

ほかに、真か偽かの二値だけをとる真偽値があり、TRUE (真)、またはFALSE (偽) で示します。真偽値を数値として扱う場合、TRUEは1、FALSEは0になります。文字列として扱う場合、それぞれTRUE、FALSEという文字列になります。

=(1=1) → TRUE
=(3>5) → FALSE
=TRUE+1 → 2
="TRUE is "&TRUE → TRUE is TRUE

数値か文字列で、日付や時間を示すこともできます。数値として扱う場合は、1日を1とし、日付や日付を含む時刻は1900年1月1日00:00からの経過時間、日付を含まない時刻・時間は00:00からの経過時間で示されます。

=("2010/9/8"+1) → 2010/9/9 ※セルの書式を「短い日付形式」にした場合

関数、引数

関数は「関数名 (引数1, 引数2, …)」の形式で使用することができます。引数は省略可能なものもあります (カッコは省略できません。引数のない関数はPI()のように使います)。関数を実行すると何らかの値を返すので、そのままセルの値とすることもできますし、他の関数の引数にしたり、演算子で演算することもできます。

エラー

数式の結果がエラーになる場合があります。たとえば0で除算した場合は #DIV/0! というエラーになります。

=1/0 → #DIV/0!

エラーは数値でも文字列でもないので、関数や演算子による演算はほとんど行うことができません。エラーであるかどうか判定したい場合は ISERROR 関数を使用してください。

=ISERROR(1/0) → TRUE

エラーの意味と対処方法については下記ページを参照してください。

算術演算子、比較演算子、論理演算

+ : 加算

=5+3 → 8

- : 減算

=5-2 → 3

* : 乗算

=5*3 → 15

/ : 除算

整数同士の除算でも、整数が返るとは限りません。

=5/3 → 1.666667 ※セルの書式により表示される桁数は異なります
=ROUNDDOWN(5/3,0) → 1 ※小数点以下切り捨て

MOD(値, 除数) : 剰余

=MOD(5,3) → 2

^ : 累乗

=5^3 → 125
=2^0.5 → 1.414214

& : 文字列の結合

="ABC"&"DEF" → ABCDEF
=100&200 → 100200

= : 両辺が等しければTRUE、それ以外はFALSE

等号2つ == じゃなくて、1つ = なので注意。

=(1=1) → TRUE
=(1=2) → FALSE
=("string"="string") → TRUE
=("string"="String") → TRUE ※大文字小文字は区別されない
=("string"="string") → FALSE ※半角全角は区別される
=(1="1") → FALSE

<> : 両辺が等しくなければTRUE、それ以外はFALSE

!= は使えません。

=(1<>2) → TRUE
=(1<>1) → FALSE
=("string"<>"streich") → TRUE

> : 左辺が右辺より大きければTRUE、それ以外はFALSE

=(2>1) → TRUE
=(1>1) → FALSE

< : 左辺が右辺より小さければTRUE、それ以外はFALSE

=(1<2) → TRUE
=(1<1) → FALSE

>= : 左辺が右辺以上ならTRUE、それ以外はFALSE ==

=(2>=1) → TRUE
=(1>=1) → TRUE
=(0>=1) → FALSE

<= : 左辺が右辺以下ならTRUE、それ以外はFALSE ==

=(1<=2) → TRUE
=(1<=1) → TRUE
=(1<=0) → FALSE

AND(真偽式1, 真偽式2, …) : 論理積

=AND(TRUE,TRUE) → TRUE
=AND(TRUE,FALSE) → FALSE
=AND(FALSE,FALSE) → FALSE
=AND(3<5,5<7) → TRUE

OR(真偽式1, 真偽式2, …) : 論理和

=OR(TRUE,TRUE) → TRUE
=OR(TRUE,FALSE) → TRUE
=OR(FALSE,FALSE) → FALSE
=OR(3<0,3<5) → TRUE

NOT(真偽式) : 否定

=NOT(TRUE) → FALSE
=NOT(FALSE) → TRUE
=NOT(3<5) → FALSE

セル、セル範囲の参照

  A B C D E F G
1              
2              
3              
4              
5              
6              
7              
8              
9              
10              

セルは列名と行番号で指定します。A列1行のセルなら A1 です。

四角形のセル範囲は左上端と右下端のセルをコロンでつないで指定します。たとえば C1:D2 で4つのセルを含むセル範囲を示します。 F:F 8:9 のように、行番号/列名を省略すると、指定した列、行の全体を示します。

四角形でないセル範囲は、セルか、四角形のセル範囲をコンマでつないで指定します。 A4,B4:C5,C6 で6つのセルを含むセル範囲を示します。

別シートにあるセルを参照するには、セル指定、四角形のセル範囲指定の前に「シート名!」を付与します。そのシートが別ブックにあるなら「[ブック名] シート名!」にします。

ただし、通常は数式の入力中にセルをクリックして参照するのがもっとも簡単です。四角形のセル範囲はドラッグで、コンマ区切りはCtrlを押しながらクリック/ドラッグで実現できます。

絶対参照と相対参照

  A B C D E F G
1              
2   =X1 =Y1   =$X1 =$X1  
3   =X2 =Y2   =$X2 =$X2  
4              
5   =X$1 =Y$1   =$X$1 =$X$1  
6   =X$1 =Y$1   =$X$1 =$X$1  
7              

セル(セル範囲含む)の指定には絶対参照と相対参照の2種類があります。これはセル指定の列名、行番号の前に$があるかないかで指定します。$があれば絶対参照、なければ相対参照です。

この違いは、このセル参照を含むセルを別のセルにコピーしたときに現れます。

絶対参照の場合は、別のセルにコピーした際にも参照するセルは変化しません。相対参照の場合は、コピー元とコピー先のセルの位置関係に応じて参照するセルが変化します。

付表の例ではB2、E2、B5、E5にそれぞれさまざまな方法でX1への参照を書き、それぞれを横と下にコピーしたものです。$のついた部分は参照先が変化せず、ついていない部分はセルの位置に応じて参照先が変化しています。

絶対参照と相対参照の切り替えは、数式の編集時セル指定の部分にカーソルがある状態でF4キーを押すのが便利です。F4キーを押すたび、A10 → $A$10→ A$10 → $A10 → A10 … のように変化します。

よく使う関数

LEFT(対象文字列, 文字数)

対象文字列 の左から 文字数 文字を返す。

=LEFT("ABCDEF", 3) → ABC

MID(対象文字列, 開始位置, 文字数)

対象文字列開始位置文字目から文字数文字を返す。文字数が充分大きいと開始位置以降すべての文字を返す。

=MID("ABCDEF", 3, 2) → "CD"
=MID("ABCDEF", FIND("C","ABCDEF"), 100) → "CDEF" ※Cがある位置から最後まで

FIND(検索文字列, 対象文字列, [開始位置])

対象文字列開始位置文字目から検索文字列を探し、見つかったら検索文字列の1文字目がある位置を返す。開始位置省略時は1文字目から。見つからなければ#VALUEエラーを返す。

=FIND("D","ABCDEFABCDEF") → 4
=FIND("D","ABCDEFABCDEF",5) → 10
=FIND("1","ABCDEFABCDEF") → #VALUE

TEXT(値, 表示形式)

表示形式に基づいて文字列に変換したものを返す。表示形式は[セルの書式設定]-[表示形式]-[ユーザー定義]で使われるものと似ているが、完全に同じではない (参照: TEXT 関数 - Excel - Microsoft Office, ユーザー定義の表示形式を作成または削除する - Excel - Microsoft Office)。不正な表示形式を指定すると#VALUEエラーを返す。また、値に255文字を越える文字列を渡すと#VALUEエラーを返す。

=TEXT(12345, "0") → "12345"
=TEXT(123.45, "0.0") → "123.5"
=TEXT(12345, "0_") → #VALUE ※セルの表示形式では有効な _ (スペース挿入) などは使えない
=TEXT(DATEVALUE("2011/2/28"), "yyyy/m/d") → "2011/2/28"
=TEXT("2011/02/28", "yyyy/m/d") → "2011/2/28" ※日付を示す文字列は暗黙的に日付と見なされる
=TEXT("abc", "@") → "abc"
=TEXT(REPT("a", 256), "@") → #VALUE ※255文字を越える文字列は扱えない

MATCH(検索値, 検索範囲, 検索方法)

検索範囲検索方法にもとづいて検索値で検索し、最初にヒットしたセルの検索範囲内での行位置/列位置を返す。検索範囲は1列n行かn列1行のセル範囲。検索方法はややこしいのでつねに0を指定することを強く推奨する。0を指定すると完全一致した場合のみヒットしたとみなし、ヒットしなければ#N/Aエラーを返す。

  A B C D
1
2
3
4
(付表において)
=MATCH("ぬ", B:B, 0) → 3 ※B列の3行目でヒット
=MATCH("ぬ", 3:3, 0) → 2 ※3行目の2列目でヒット
=MATCH("ぬ", B3:B4, 0) → 1 ※この範囲内の1行目でヒット
=MATCH("ぬ", A:A, 0) → #N/A ※A列ではヒットしない

INDEX(範囲, 行位置, 列位置)

範囲内の行位置列位置にあるセルの値を返す。範囲はn列n行のセル範囲だが、1列n行かn列1行のセル範囲の場合は、3つ目の引数を省略可能(2つ目の引数は、範囲が1列n行なら行位置、範囲がn列1行なら列位置と見なされる)。

  A B C D
1
2
3
(付表において)
=INDEX(A1:D3,3,2) → ぬ ※A1:D3の3行目2列目
=INDEX(B2:C3,2,1) → ぬ ※B2:C3の2行目1列目
=INDEX(B:B,3) → ぬ ※B列の3行目
=INDEX(3:3,2) → ぬ ※3行目の2列目
=INDEX(A:A,MATCH("ぬ",B:B,0)) → り ※B列が「ぬ」である行(3行目)のA列のセルの値

IF(条件式, [真の場合の値], [偽の場合の値])

条件式がTRUEなら真の場合の値、FALSEなら偽の場合の値を返す。真の場合の値偽の場合の値のうち片方は省略しても良いが、省略時の挙動がややこしいので省略しないことを推奨する。

=IF(1<3, "1は3より小さい", "1は3より大きい") → 1は3より小さい

COUNTIF(範囲, 条件)

範囲内に条件に一致するセルがいくつあるかを返す。

  A B C D
1 10 20 30 40
2
=COUNTIF(A1:D2,20) → 1
=COUNTIF(A1:D2,"<=30") → 3
=COUNTIF(A1:D2,"い") → 2

SUM(範囲)

  A B C D
1 10 20 30 40
2

範囲内の数値をすべて合計した値を返す。

=SUM(A1:D2) → 100

ISERROR(式)

がエラーならTRUE、エラーでなければFALSEを返す。FIND、MATCH、INDEXなどが成功したかによって処理を変えたいときに便利。

=ISERROR(FIND("A","123456")) → TRUE
=IF(ISERROR(FIND("A","123456")),"not found","found") → not found

GETPIVOTDATA(値の系列, 参照するピボットテーブル, 行/列名1, 行/列の値1, 行/列名2, 行/列の値2, …)

参照するピボットテーブルから、行/列名X行/列の値X値の系列の値を返します。セル参照と同じように、数式中でピボットテーブル内のセルをクリックすればこの関数を使った参照が作られるので、これを利用して、必要があれば書換えるのが簡単。

  A B C D E F
3 データの個数 / ID 学年        
4 学部 1 2 3 4 総計
5 1 1   1 3
6 1 2     3
7 1   1 1 3
8   1   1 2
9   1 1 2 4
10 総計 3 5 2 5 15
=GETPIVOTDATA("ID",$A$3,"学年",2,"学部","教") → 2
※$A$3にあるピボットテーブルの「学年」が「2」で学部が「教」の「ID」の個数