【スプレッドシート】LET関数,ARRAYFORMULA関数

これがなかったときどうしてたんだろう?便利すぎる関数

LET関数

計算の結果を変数として保持する

例えばこんな感じ

LET( name1, func1(a,b), name2, func2(name1), func3(name2) )

実際に使ってみる

ABCDEFGHIJKMN
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つが重要

  1. 各処理ごとに名前を付けられる
  2. 定義したものを再利用できる
  3. ネストを減らせる

ということで次

ARRAYFORMULA関数

配列に対して関数を適用させて、配列を出力する

年齢を2倍したものを出力する

ABCDEFGHIJKMN
1名前年齢出身性別
2花子10東京B2*220ARRAYFORMULA(B2:B6*2)20
3太郎15東京B3*23030
4山本12沖縄B4*22424
5鈴木75北海道B5*2150150
6佐藤43石川B6*28686
7
8
9
10
テストテーブル

ARRAYFORMULAを使わない場合、式を行数分コピペする

ARRAYFORMULAを使う場合、式は1行で済む

式を修正しなければならなくなったとき1つのセルを修正するだけ!

行を追加するときも式を気にしないで済む

まとめ

例がイマイチですね…

とはいえ、便利さは伝わったのではないでしょうか

どちらもスプレッドシートの記述をプログラミング言語っぽくする良いものです

コメント

タイトルとURLをコピーしました