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

最終更新日

Lambda の使い方はこんな感じ

Google Sheets の lambda 関数は、各行で繰り返す計算に対して非常に強力!計算を繰り返す目的には arrayformula 関数も使える。しかし、カスタム関数を作成して返す lambda 関数 (と map 関数) を使うと、数式の可読性がそれよりも断然に優れてる。

例えばこんな状況で使うのが適してる。列 A には運動した時間が [hh:mm:ss] の形式で入力され、列 B にはその運動で消費したエネルギー [kcal] が入力されてる。したいことは、各行の運動時間と消費エネルギーから仕事率 [W] を計算すること。

ABC
1Time [hh:mm:ss]Energy [kcal]Power [W]
20:03:2028.4
30:01:4328.8
40:01:0217.4
5
データはこんな感じ

同じ計算の繰り返しは、maplambda なら 1 つのセルに数式を記入するだけで済む。上記の状況設定なら、こんな数式を 2 行目のセル (例えば C2) に書けばいい。読みやすくするために適当に改行してるけど、実際には改行は入力しませんよ。

= map(
  A2:A, 
  B2:B, 
  lambda(
    time, 
    eng, 
    eng * 4184 / sumproduct(split(time, ":"), {60 * 60, 60, 1})
  )
)
  1. map は、ここでは 3 つの引数を取ってる
    • 2 行目は列 A を lambda に渡すことを表してる
    • 3 行目は列 B を lambda に渡すことを表してる
    • 4 行目は map が取得した列 (この例では列 A と列 B) を lambda に渡すことを示す形式的なもの
  2. lambda も、ここでは 3 つの引数を取ってる
    • 5 行目は、第 1 引数 A2:A の値を、変数 time に入れて扱うよ、という宣言
    • 6 行目は、第 2 引数 B2:B の値を、変数 eng に入れて扱うよ、という宣言
    • 7 行目は具体的な計算。ここでは、例えば列 A の値は変数 time に代入されてる

この数式で入力するメリットは、修正や更新の手間が圧倒的に少ないこと。各セルそれぞれに計算式を記入すると、修正や更新の際に全てのセルで作業しなければならない。これは計算ミスや入力ミスの温床になるし、単純に面倒だ。lambdamap を使えば、わずか 1 つのセルの修正/更新だけで済む👍

セルを引っ張ってコピーは、もう終わり!

表計算では、セルの端のツマミを掴んで引っ張ると、入力内容を連続するセルにコピーできる。これは同じ内容でセルを埋めるときに便利で、例えば僕も移動平均の計算方法を解説した記事で使った。

コピーすれば便利?

連続コピーはその場をしのぐには便利な反面、変更やメンテナンスには非常に弱い。もちろん、計算式を一発で各セルに記入できる点では便利だ。しかし、あとで計算方法を変更するときや間違いに気づいたときに、式をコピーした全てのセルを修正しなければならない。

長く使うことが想定される表計算では、変更やメンテナンスに耐える maplambda を積極的に使おう。僕はこれまで以下のような自分の活動を表計算に記録してメンテナンスしてきたけど、今回 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 に挑戦しなきゃな💪

コメントを残す

%d人のブロガーが「いいね」をつけました。