【Googleスプレッドシート】LET関数で数式を日本語化!VLOOKUPやIF文の「確認コスト」を削減する管理術
「この数式、何だっけ…?」もう悩みません。GoogleスプレッドシートのLET関数を使えば、複雑なVLOOKUPやIF文も日本語で管理可能に。数式の可読性を劇的に上げ、チームの「確認コスト」を削減する実践的な方法を解説します。

久しぶりに触ったスプレッドシートや、前任者が作ったシートを開いたとき、「この数式、何を参照しているんだ…?」と数式の解読や確認に時間を使った経験はありませんか?
例えば、「複雑なVLOOKUPを解読するのに時間がかかった」とか「前任者が作った数式の意味が分からず、修正を諦めた」など。
日々使うシートならまだしも、1年に数回しか使わない複雑なシートや、引き継ぎ資料がないシートなら尚更です。数式の意味を理解するだけで、10分、20分と「確認するコスト」が膨らんでいきます。
数式を読み解く手間や時間は、短ければ短いほど良い。ということで、今回は、この「数式わからん問題」を根本から解決する、Googleスプレッドシートの LET関数 を学んだので、その覚書です。
LET関数を使って、数式に日本語の「任意の名前(変数)」を付けることで、数式そのものを日本語の指示書に変え、チーム内の「確認するコスト」を劇的に省いていきましょう!
※この記事は、VLOOKUP や IF は使えるけれど、数式が長くなって管理に困っている、というような方を対象にしています。もう一歩、を目指す方向け。
LET関数とは?LET関数でできること
LET関数は、LET関数内(カッコで括られた範囲)で、使用する数式の計算結果や共通の数値に「任意の名前(変数)」をつけることができます。
この「任意の名前」をつけることでのメリットは大きく二つ。
メリット 1: 日本語で変数名を使える
1つ目はこの「任意の名前」に日本語を使うことができること。
例えば、今までは「A2」としか数式内で書くことができなかったのが「売上, A2」と「売上」と名前をつけて、「売上 – 仕入」のように数式を書くことができるようになります。
メリット 2: 計算結果を再利用できる
2つ目は、繰り返し使う数字や計算に名前をつけて、計算結果を再利用できること。
例えば、「売上 – 仕入」で利益を出した後に、この利益が目標超えなら「A」、目標未達だが利益自体は発生しているなら「B」、利益がマイナスなら「C」とランクをつけたい場合、IF文の中に「売上 – 仕入」の計算を複数回書くか、「利益」を計算するセルをもう一つ追加する形式がよくある計算式だと思います。
これについて、「利益, 売上-仕入」とあだ名をつけた後に「IF(利益>⚪︎⚪︎,”A”,IF(利益>⚪︎⚪︎……))」と計算結果を再利用できます。
この2つのメリットを利用することで、「この数式ってなんだったっけ?」や「同じ数字や計算を複数回使ってたけど修正時に変更漏れがあった」を減らすことができそうですね!
LET関数を使って数式を「確認するコスト」を下げる
数式の「確認するコスト」は、侮れません。
久しぶりに見たシートや、前任者が作ったシートなど……。
これらを「作成」「解読」「修正」したいときに一々発生するコストです。
- このセルは何を表してるのか
- この計算は何をやっているのか
- 同じ計算式を何回書いて、何回修正したら良いのか……
LET関数は「はじめにちょっと頑張って後で楽する」ことができる関数です。
LET関数による「確認コスト」の解決策
| コストの種類 | 根本原因 | LET関数の解決策 |
|---|---|---|
| 作成:同じ計算を何度も書くのが面倒 | エラーチェックや空白処理のために、VLOOKUPなどを2回以上書く必要がある。 | 重い計算を 一度だけ実行 し、その結果を変数として何度も再利用することで、入力の手間を省く。 |
| 解読:数式の目的がわかりづらい | セル参照と記号の羅列で、ロジックが分かりづらい。 | 計算結果に日本語の「あだ名」をつけ、 引き継ぎ資料がなくてもロジックが伝わる ようにする。 |
| 修正:共通の数値がバラバラに埋もれている | 税率やエラーメッセージなどが散らばって書き込まれ、全てを修正した確約が難しい。 | 共通の数値を 数式の冒頭に一箇所だけ集約 し、誰でも安心して修正できる状態にする。 |
LET関数の書き方と注意点
LET関数の書き方は「任意の名前」と「値や数式」をセットで書いて、最後にセルに表示する計算式を書く形です。
「任意の名前」はスペースなどの特殊文字が使用できない点や、先頭に数字(「9hello」など)を使用できない点に注意してください。
※より詳しいリファレンスを見たい方は公式のこちらから
Google ドキュメント エディタ ヘルプ:LET関数
LET関数の記入例
以下にいくつかLET関数の記入例を掲載しますので、気になるものを見てみてください。
関数例 1: セルに任意の名前をつけて、数式だけ見て内容を理解する
セルを直接参照するのではなく、売上や仕入といった分かりやすい名前を付けることで、数式の意味が一目でわかります。
普通の書き方
=A2-B2
LET関数使用
=LET(売上,A2, 仕入,B2, 売上-仕入)
関数例 2: 数式に任意の名前をつけて、結果を再利用する
複雑な計算結果(この場合は利益)に名前をつけ、IF文の中でその結果を何度も再利用することで、数式の冗長性を解消し、修正箇所を1箇所にまとめます。
普通の書き方 (BEFORE)
=if(A2-B2>3,"A",if(A2-B2>0,"B","C"))
LET関数で書いた場合 (AFTER)
=let(売上,A2, 仕入,B2, 利益,売上-仕入, if(利益>3,"A",if(利益>0,"B","C")))
関数例 3: 複数の計算を組み合わせて複雑な計算を行う
長い数式を「顧客IDの取得」→「顧客名の検索」→「エラーの定義」→「ランクの判定」といった、手順書のようなロジックに分解します。
課題の数式 (BEFORE)
=IFERROR(VLOOKUP(A2,'顧客マスタ'!A:B,2,FALSE),"ID登録なし")& "_ "&IF(B2>100000,"ゴールド",if(B2>30000,"シルバー","ブロンズ"))
LET関数による解決 (AFTER)
=LET(
顧客ID_1,A2,
顧客名検索結果_2,VLOOKUP(顧客ID_1,'顧客マスタ'!A:B,2,FALSE),
エラーメッセージ_3,"ID登録なし",
顧客名_4,IFERROR(顧客名検索結果_2,エラーメッセージ_3),
購入金額_5,B2,
高額_6,"ゴールド",
標準_7,"シルバー",
低額_8,"ブロンズ",
ランク_9,IF(購入金額_5>100000,高額_6,if(購入金額_5>30000,標準_7,低額_8)),
顧客名_4&"_"&ランク_9
)
「任意の名前」をつけるルール上、書く文字数はちょっと増えちゃいますが、今までの書き方での数式では何をやっているかがわからなくても、LET関数で日本語の「任意の名前」をつけたことで、数式を見ただけでだいたい何をやっているか分かるようになったのではないでしょうか。
代わりにマニュアルの文字数や数式だけ変わっててマニュアルが変わってなくて生合成が取れない!などの困りごとが減ると思えば悪くないと思います。
実際のシートをLET関数を使って作ってみる
実際に「売上」と「仕入レート」を使って「利益」を計算するロジックを構築してみましょう。
今回は販売データシートの「A列に売上日時」「B列に売上金額」「C列に仕入先ID」「D列に利益」、レートマスタシートの「A列に仕入先ID」「B列に仕入れレート」の一覧が入っている、と想定します。また、エラー時の表示内容も変数化してみます。
まずは数式を提示しますので、後述する手順と比較して「数式の確認にかかる時間」を比べてみましょう。
実行可能な数式(販売データ!D2セル)
=LET(
仕入先ID_1, C2,
売上金額_2 , B2,
検索結果_3, VLOOKUP(仕入先ID_1, レートマスタ!A:B, 2, FALSE),
エラー時の表示_4, "レート未登録",
仕入レート_5, IFERROR(検索結果_3, エラー時の表示_4),
IF(仕入レート_5=エラー時の表示_4,
エラー時の表示_4,
売上金額_2 - (売上金額_2 * 仕入レート_5)
)
)
※「任意の名前(変数)」に数字を振る必要はないのですが、処理の順番を分かりやすくするために、あえて番号を振っています。なお、ナンバリングが末尾なのは、先頭に数字を振ると仕様上エラーとなるためです。
※参考:従来方式の場合
= IF(iferror(VLOOKUP(C2,'レートマスタ'!A:B,2,false),"レート未登録")="レート未登録","レート未登録" , B2 - (B2 * VLOOKUP(C2,'レートマスタ'!A:B,2,false)))
数式のロジック(日本語の作業手順)
- まず、基本となる
仕入先ID_1、売上金額_2、という2つの値を準備します。 - 次に、
仕入先ID_1を元にVLOOKUPを使って仕入れレートを検索し、その結果を検索結果_3として一時的に保存します。 検索結果_3がもしエラーであれば表示するメッセージをエラー時の表示内容_4に設定します。検索結果_3の内容がエラーかどうかをチェックして、エラーでなければそのまま検索結果_3の値を、エラーであればエラー時の表示内容_4のメッセージを仕入レート_5とします- 最後に、
仕入レート_5の値を見て、エラーではなかった場合だけ 利益の計算 を実行します。エラー表示だった場合は、その エラーメッセージをそのまま表示 します。
どうでしょうか。
業務でVLOOKUPやIFを使っている方であれば、数式と日本語の作業手順書に大きな差は感じられなかったのではないでしょうか。
今回の数式作成のポイント
| ポイント | 従来の課題 |
|---|---|
| 全ステップの言語化 | 英数字の羅列から、日本語を使うことで、「数式を読む」から「文字を読む」に近くなり、抵抗感減 |
| VLOOKUPの計算結果を保存 | VLOOKUPの結果を一時的に保存することで、①1度の実行で済む、②修正したい時もわかりやすい という2つの利点を手に入れた |
| 最終計算の透明性 | 最後の計算が日本語で書かれていて、このセルで「何をしたいのか」が明確 |
応用編:もっと色々使ってみる
応用1: 共通の「税率」を一箇所で定義する
もしあなたの数式に「消費税率(1.1)」が複数回出てくる場合、LET関数で集約しましょう。
従来の数式(変更時の確認が怖い)
=(A2*1.1)+(B2*1.1)+(C2*1.1)
LET関数による解決(誰でも安心して修正可能)
=LET(
消費税率, 1.1,
(A2*消費税率)+(B2*消費税率)+(C2*消費税率)
)
応用2:シートの動作を軽くする「二重計算の解消」
VLOOKUPやSUMIFSなどの重い検索処理をLET関数で一度だけ実行し、その結果を変数に格納することで、同じ計算を繰り返すことを防ぎます。これにより、シート全体の計算負荷が減り、動作が軽くなるという副次的なメリットがあります。
課題の数式 (BEFORE)
=IF(countif(A2,'商品マスタ'!A:A)=0,"ゼロ",countif(A2,'商品マスタ'!A:A))
LET関数による解決 (AFTER)
=LET(
商品ID名カウント結果,countif(A2,'商品マスタ'!A:A),
IF(商品ID名カウント結果=0,"ゼロ",商品ID名カウント結果)
)
応用 3: ARRAYFORMULAと連携し、VLOOKUPの全行適用を「手順書」にする(上級者向け)
ARRAYFORMULAは、VLOOKUPをシートの全行に一括適用する際に使われますが、複雑なエラー処理が加わると数式がすぐに「呪文」と化し、確認コストが爆上がりしやすいです。
LET関数を使えば、「キーの取得」→「VLOOKUP実行」→「エラー処理」という一連の配列処理を、明確な手順として定義できます。
ARRAYFORMULA + LETによる可読性の向上(全行VLOOKUPの例)
=ARRAYFORMULA(
LET(
検索キー配列_1,A2:A,
検索結果_2,VLOOKUP(検索キー配列_1,マスタ!A:B,2,FALSE),
IF(ISBLANK(検索キー配列_1),
"",
IFERROR(検索結果_2,"データなし")
)
)
)
まとめ: LET関数で、確認コストに終止符を
LET関数は、「新しく特別な計算ができるようになった関数」というよりも「 これまでの内容をより円滑に進められるツール 」のように思います。
- 日本語変数で、引き継ぎ時の説明と解読コストを最小限に。
- 一括定義で、メンテナンス時の修正と確認コストを最小限に。
この2つの大きなメリットを使って、「よくわからないから」「めんどくさい」を減らすお役に立てたら嬉しいです。
チームで使うスプレッドシートの場合は、変数名の付け方(例:「売上」なのか「売上金額」なのか)のルールを揃えておくと、さらに可読性が高まるかもしれませんね。
これを機会にチームの中で、ばらついている定義があれば擦り合わせてみるのもおすすめです。