表計算 Lambda 関数で、数式の手入力にサヨナラ👋

Lambda の使い方はこんな感じ
Google Sheets の lambda
関数は、各行で繰り返す計算に対して非常に強力!計算を繰り返す目的には arrayformula
関数も使える。しかし、カスタム関数を作成して返す lambda
関数 (と map
関数) を使うと、数式の可読性がそれよりも断然に優れてる。
例えばこんな状況で使うのが適してる。列 A には運動した時間が [hh:mm:ss] の形式で入力され、列 B にはその運動で消費したエネルギー [kcal] が入力されてる。したいことは、各行の運動時間と消費エネルギーから仕事率 [W] を計算すること。
A | B | C | |
---|---|---|---|
1 | Time [hh:mm:ss] | Energy [kcal] | Power [W] |
2 | 0:03:20 | 28.4 | |
3 | 0:01:43 | 28.8 | |
4 | 0:01:02 | 17.4 | |
5 | … | … |
同じ計算の繰り返しは、map
と lambda
なら 1 つのセルに数式を記入するだけで済む。上記の状況設定なら、こんな数式を 2 行目のセル (例えば C2) に書けばいい。読みやすくするために適当に改行してるけど、実際には改行は入力しませんよ。
= map(
A2:A,
B2:B,
lambda(
time,
eng,
eng * 4184 / sumproduct(split(time, ":"), {60 * 60, 60, 1})
)
)
map
は、ここでは 3 つの引数を取ってる- 2 行目は列 A を
lambda
に渡すことを表してる - 3 行目は列 B を
lambda
に渡すことを表してる - 4 行目は
map
が取得した列 (この例では列 A と列 B) をlambda
に渡すことを示す形式的なもの
- 2 行目は列 A を
lambda
も、ここでは 3 つの引数を取ってる- 5 行目は、第 1 引数
A2:A
の値を、変数time
に入れて扱うよ、という宣言 - 6 行目は、第 2 引数
B2:B
の値を、変数eng
に入れて扱うよ、という宣言 - 7 行目は具体的な計算。ここでは、例えば列 A の値は変数
time
に代入されてる
- 5 行目は、第 1 引数
この数式で入力するメリットは、修正や更新の手間が圧倒的に少ないこと。各セルそれぞれに計算式を記入すると、修正や更新の際に全てのセルで作業しなければならない。これは計算ミスや入力ミスの温床になるし、単純に面倒だ。lambda
と map
を使えば、わずか 1 つのセルの修正/更新だけで済む👍
セルを引っ張ってコピーは、もう終わり!
表計算では、セルの端のツマミを掴んで引っ張ると、入力内容を連続するセルにコピーできる。これは同じ内容でセルを埋めるときに便利で、例えば僕も移動平均の計算方法を解説した記事で使った。

連続コピーはその場をしのぐには便利な反面、変更やメンテナンスには非常に弱い。もちろん、計算式を一発で各セルに記入できる点では便利だ。しかし、あとで計算方法を変更するときや間違いに気づいたときに、式をコピーした全てのセルを修正しなければならない。
長く使うことが想定される表計算では、変更やメンテナンスに耐える map
や lambda
を積極的に使おう。僕はこれまで以下のような自分の活動を表計算に記録してメンテナンスしてきたけど、今回 lambda
を知って全ての記録を改めて再整理した👍
シート名 | 内容 | 種類 | 更新 |
---|---|---|---|
LBM | 当ブログ 更新 | 記録 | 継続 💪 |
Poké Go | ポケモン GO 図鑑 | 記録 | 継続 💪 |
Plank | プランク | 記録 | 継続 💪 |
swim | 水泳 | 記録 | 継続 💪 |
run | 持久走 | 記録 | 継続 💪 |
🔒 RareJob | オンライン英会話 受講 | 記録 | 終了 😴 |
🔒 Gaba | 英会話教室 受講 | 記録 | 終了 😴 |
🔒 chart_swim | 水泳 | 図示 | 不要 🤖 |
🔒 chart_run | 持久走 | 図示 | 不要 🤖 |

表計算が関数型プログラミングの入口に…!
ところで、配列に対する map
操作は関数型プログラミングに繋がる。同じく Google Sheets で利用できる reduce
関数と合わせ、これらの関数と関数型プログラミングを次のように関連付けて紹介する記事が、ASCII.jp に掲載されてる。
関数型プログラミングをサポートする優れた機能 … Map と Redue メソッドを使うと、コードがぐっとすっきりし、読むのも管理も簡単になり、関数をもっと使いこなせるようになります
ASCII.jp:JavaScriptプログラマーならMap()とReduce()で関数型プログラミングを始めてみない?
まさか表計算を通じて関数型プログラミングに出会うとは想像もしてなかった。少しだけ関数型プログラミングへの理解の解像度が上がったかもしれない。僕は関数型プログラミングを学びたくて『すごい Haskell たのしく学ぼう!』を 2021 年に買った。学習は全然進んでないけど、また Haskell に挑戦しなきゃな💪