雑・Excel入門試論 - 脱VLOOKUPの思考 08 - セル - 計算式・関数

# 計算式の基本
## 数式
セル内または、セル範囲の値を計算する式。
ex. `=A1+A2+A3+A4`

## 関数
Excelにすでに用意されている定義済みの計算式です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/449629c3-48f1-3af2-d902-829d7b4eb476.png)
関数は、引数またはパラメータと呼ばれる指定された値に基づいて、特定の計算を特定の順序で実行する。
ex. `=SUM(A1:A4)`

関数には戻り値があります。`=1+2` の戻り値は `3` です。

セル参照をする場合、`=A1` の戻り値は、A1に入っているデータと書式に依存します。空白だった場合、日付はシリアル値０の1900年1月0日、それ以外は０が表示され、表示形式はそれぞれの書式で表示されます。下の図のB列はそれぞれの書式設定が行われており、C列は標準のままです。文字列にも０が返されることに注意してください。
![2022-12-06_13-23-43.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/3a4c78c5-5585-f6da-4802-6583acb79467.gif)

## セルの参照
　計算したい数値を数式に入力することもできますが、代わりにセル参照機能を使うケースが多くなります。なぜなら、セルの値を変更すると、自動的に再計算されるからです。

　単に数式に値を入力したのでは、後で値が変わると、数式を作り直さなければなりません。しかし、セル参照すれば、値が変わっても数式は変わらず、自動的に再計算されます。

　また、数値が並んだ表になっている場合、計算式をコピーすると自動的に参照先を変更してくれ、同じ計算をそれぞれの行に対して行うことができます。

![2022-12-06_14-10-13.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/66aaa8f7-6ea0-5660-a5f0-34f6685846bf.gif)

### 注意事項

1. **BODMAS** (Brackets, Division, Multiplication, Addition, Subtraction)のルール
    - 計算が行われる順序です。
    - カッコで囲まれた式が最初に評価されます。
    - 算術演算子は、除算が最初に評価され、次に乗算、そして加算が評価され、減算は最後に評価されます。
1. 計算式は通常数値データを扱います。「データの入力規則」を利用すると、セルに入るべきデータの種類を指定できます。
1. 数式で参照するセルのアドレスが正しいかどうかを確認するには、キーボードのF2キーを押します。数式で使用されているセルがハイライトされます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/eaffc550-4ed8-6a6e-bda3-18eb6a6939ed.png)

# IF関数
IF関数は、複雑な計算に使用できますが、IF式のネストは悪夢です。計算式を読みにくくし、全体の動作を遅くします。

```
=IF(C4>5,40*C4,20*C4)
```

その他の動作を遅くする関数として、SUMIF、COUNTIF、VLOOKUP、INDIRECT、OFFSETなどがあります。特にテーブルが大きい場合、関数の使い方に注意しなければなりません。

# LAMBDA（ラムダ）でユーザー定義関数
## セルにLAMBDAを設定する
　Microsoft365では、ユーザーが関数を定義するためにLAMBDA関数が使用できます。
　小数点以下を銀行丸めする式を書くと、以下のようになります。

```text:LAMBDAなし
=IF(
    MOD(ABS(A2),1)=0.5,
    EVEN(ABS(A2)-0.5)/SIGN(A2),
    ROUND(A2,0)
)
```
　これをLAMBDAを使って書くと

```text:LAMBDAあり
=LAMBDA(
    n,
    IF(
        MOD( ABS(n), 1 ) = 0.5,
        EVEN( ABS(n) - 0.5 ) / SIGN(n),
        ROUND( n, 0 )
    )
 )(A2)
```
　このように、参照先を1か所にできます。これを小数点以下の桁数指定の関数に拡張すると、以下のようになります。

```text:LAMBDA桁数付き
=LAMBDA(n,digit,
    IF(
        MOD( ABS(n) * 10 ^ digit, 1 ) = 0.5,
        EVEN( ABS(n) * 10 ^ digit - 0.5 ) / 10 ^ digit * SIGN(n),
        ROUND( n, digit )
    )
)( A2, 1 )
```    

## 名前の管理にLAMBDAを追加する
LAMBDA 関数にわかりやすい名前を付け、説明を指定し、ブック内の任意のセルから再利用できるようにします。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/27f45a48-6f7a-8fde-8274-fdbb37d7c961.png"/>
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/54baf5bd-f22a-f731-6de9-801c5d573eb5.png"/>

|||
|:--|:--|
|名前|LAMBDA関数につける名前|
|スコープ|関数の使える範囲。ワークブックまたはシート|
|コメント|関数の説明|
|参照範囲|ラムダ式を入力します。最期のパラメータを入れるカッコは入力しません|

参照範囲に入れるLAMBDA式は、最期のパラメータを入れるカッコを付けません。
`=LAMBDA(x,x*10)(A1)`
ではなく
`=LAMBDA(x,x*10)`
です。

これで、自分で作成した関数を名前で呼び出すことができます。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/fc6bb125-4fda-fca3-134a-78fa1371e4b9.png"/>


# エラー値

|エラー|ERROR.TYPE|内容|
|:--|:--:|:--|
#NULL!|1|指定した複数のセルやセル範囲に共通部分がない
#DIV/0!|2|0または空のセルによる除算
#VALUE!|3|入力した数式に問題があるか、参照先のセルに問題があります
#REF!|4|数式が無効なセルを参照している
#NAME?|5|数式名にが正しくない
#NUM!|6|数式または関数に無効な数値が含まれている
#N/A|7|数式で参照の対象が見つからない (Not Applicable)
#GETTING_DATA|8|CUBEVALUE 関数を使用して評価する場合、すべてのデータを取得する前に、一時的にセル内に "#GETTING_DATA..." というメッセージが表示されます。
#SPILL!|9|スピルする配列数式がワークシートの範囲を超えている
#CONNECT!|10|
#BLOCKED!|11|必要なリソースにアクセスできない
#UNKNOWN!|12|
#FIELD!|13|データ型に問題がある
#CALC!|14|計算式が空の配列
#EXTERNAL!|19|
#####|-|列の幅がセルのすべての内容を表示するのに十分でない

# コンテンツ
- [雑・Excel入門試論 - 脱VLOOKUPの思考 01 - ブック - 仕様と制限](https://qiita.com/spumoni/items/189004c01181c50a4821)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 02 - ブック - オプション](https://qiita.com/spumoni/items/75955db69cc34695de14)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 03 - ワークシート](https://qiita.com/spumoni/items/5408cae114034be528c4)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 04 - セル - 文字列型](https://qiita.com/spumoni/items/4ab1d7067418886c0582)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 05 - セル - 数値データ](https://qiita.com/spumoni/items/970b4b39a5a2185992ed)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 06 - セル - 日時データ](https://qiita.com/spumoni/items/9f270e181fbc45503759)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 07 -  リンクされたデータ型](https://qiita.com/spumoni/items/ed59d15753d992c3a630)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 08 - セル - 計算式・関数](https://qiita.com/spumoni/items/ae339c97627110e2134e)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 09 -  セル - 数値の書式設定](https://qiita.com/spumoni/items/1b3134d4b0284465976f)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 10 - セル - 日付と時刻の書式設定](https://qiita.com/spumoni/items/6eb602f69956a5e1502f)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 11 - セル - 条件付き書式](https://qiita.com/spumoni/items/04bd8e24284daef6f27a)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 12 - テーブル - テーブルの作成と入力規則](https://qiita.com/spumoni/items/f23beca01c5093c81c47)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 13 - テーブル - ソートとスライサー](https://qiita.com/spumoni/items/b66027008c2f9edb853f)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 14 - テーブル - 動的配列関数](https://qiita.com/spumoni/items/cc03e898f02b8c3017f7)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 15 - Power Query - エクセルのデータを読み込む](https://qiita.com/spumoni/items/fc38a4ae595b64af87f5)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 16 - Power Query - 変換](https://qiita.com/spumoni/items/100e0e3c6a5a59b03229)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 17 - Power Query - テーブルの結合](https://qiita.com/spumoni/items/debb9ea9b8692ca8fc8c)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 18 パワーピボット - データモデル](https://qiita.com/spumoni/items/08458978e86dc59f18ed)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 19 パワーピボット - 操作](https://qiita.com/spumoni/items/e7b3f245e87622e9bc79)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 20 パワーピボット - 日付テーブル](https://qiita.com/spumoni/items/340e0fcbc9cd10198112)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 21 DAX - コンテキストとイテレーター](https://qiita.com/spumoni/items/cddc7fa16341e20bafb8)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 22 DAX - CALCULATE](https://qiita.com/spumoni/items/e2218fece1ec01e177b0)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 23 DAX - タイムインテリジェンス](https://qiita.com/spumoni/items/6d8aeb9f80ecafb69c5a)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 24 - ダッシュボード - ピボットグラフ（Pivot Chart）](https://qiita.com/spumoni/items/ffb0d57a6272c2e5ad37)
- [雑・Excel入門試論 - 脱VLOOKUPの思考 25 - ダッシュボードの作成](https://qiita.com/spumoni/items/5e57ad587a343857e543)