これがなかったときどうしてたんだろう?便利すぎる関数
LET関数
計算の結果を変数として保持する
例えばこんな感じ
LET( name1, func1(a,b), name2, func2(name1), func3(name2) )
実際に使ってみる
A | B | C | D | E | F | G | H | I | J | K | M | N | |
1 | 名前 | 年齢 | 出身 | 性別 | 検索 | 花子 | |||||||
2 | 花子 | 10 | 東京 | 女 | 出力 | 花子 | 10 | 女 | |||||
3 | 太郎 | 15 | 東京 | 男 | |||||||||
4 | 山本 | 12 | 沖縄 | 男 | |||||||||
5 | 鈴木 | 75 | 北海道 | 男 | |||||||||
6 | 佐藤 | 43 | 石川 | 男 | |||||||||
7 | |||||||||||||
8 | |||||||||||||
9 | |||||||||||||
10 |
例えば、花子の年齢と性別をセルに表示する
LETを使うとこんな感じ
=LET(
tbl, INDIRECT(A2:D10), tbl_head, INDIRECT(A1:D1),
name, "花子",
col_age, MATCH("年齢",tbl_head,0),
col_sex, MATCH("性別",tbl_head,0),
result,
{
name,
VLOOKUP(name,tbl,col_age,FALSE),
VLOOKUP(name,tbl,col_sex,FALSE)
},
result
)
LETを使わないとこんな感じ
={
"花子",
VLOOKUP("花子",INDIRECT(A2:D10),MATCH("年齢",INDIRECT(A1:D1),0),FALSE),
VLOOKUP("花子",INDIRECT(A2:D10),MATCH("性別",INDIRECT(A1:D1),0),FALSE)
}
LETを使った方がわかりやすい、わかりやすいよね?
C++をメインで使ってきた身としてはExcelとかスプレッドシートの関数はすごく頭が痛くなるものでしたが、LETを知ってからかなり楽になりました
以下の3つが重要
- 各処理ごとに名前を付けられる
- 定義したものを再利用できる
- ネストを減らせる
ということで次
ARRAYFORMULA関数
配列に対して関数を適用させて、配列を出力する
年齢を2倍したものを出力する
A | B | C | D | E | F | G | H | I | J | K | M | N | |
1 | 名前 | 年齢 | 出身 | 性別 | |||||||||
2 | 花子 | 10 | 東京 | 女 | B2*2 | 20 | ARRAYFORMULA(B2:B6*2) | 20 | |||||
3 | 太郎 | 15 | 東京 | 男 | B3*2 | 30 | 30 | ||||||
4 | 山本 | 12 | 沖縄 | 男 | B4*2 | 24 | 24 | ||||||
5 | 鈴木 | 75 | 北海道 | 男 | B5*2 | 150 | 150 | ||||||
6 | 佐藤 | 43 | 石川 | 男 | B6*2 | 86 | 86 | ||||||
7 | |||||||||||||
8 | |||||||||||||
9 | |||||||||||||
10 |
ARRAYFORMULAを使わない場合、式を行数分コピペする
ARRAYFORMULAを使う場合、式は1行で済む
式を修正しなければならなくなったとき1つのセルを修正するだけ!
行を追加するときも式を気にしないで済む
まとめ
例がイマイチですね…
とはいえ、便利さは伝わったのではないでしょうか
どちらもスプレッドシートの記述をプログラミング言語っぽくする良いものです
コメント