
【スプレッドシート自動化】繰り返し作業を一撃で!MAP×BYROWで「分身の術」をマスター【第6回】
はじめに:繰り返しの苦痛から解放される
ここまでの連載で、検索・抽出・集計・連携をマスターしてきました。しかし、まだ1つ残っている課題があります。
「この計算を100行分、全部に適用したいんだけど…」
「1行ずつ数式をコピーするの、面倒すぎる…」
今回紹介するMAP関数とBYROW関数は、まさにこの問題を解決する「分身の術」。1つの数式を書くだけで、全行に自動適用されます。
LAMBDA:MAP・BYROWの心臓部
MAP・BYROWを理解するには、まずLAMBDA関数を知る必要があります。
=LAMBDA(引数, 計算式)LAMBDAは「名前のない関数」を作る関数。MAP・BYROWに「各要素に何をするか」を教える役割です。
=LAMBDA(x, x*1.1)これは「受け取った値を1.1倍する」という処理を定義しています。

MAP関数:各要素に同じ処理を適用
基本構文
=MAP(配列, LAMBDA(要素, 処理))全商品の価格を税込みに変換:
=MAP(D2:D100, LAMBDA(price, price*1.1))


実践:条件付き変換
売上金額に応じてランク判定:
=MAP(D2:D100, LAMBDA(sales,
IF(sales>=1000000, "S",
IF(sales>=500000, "A",
IF(sales>=100000, "B", "C")))
))100行分のIF関数を手動コピーする必要はもうありません。

BYROW関数:行ごとに処理を適用
基本構文
=BYROW(配列, LAMBDA(行, 処理))MAPが「1つの値」を受け取るのに対し、BYROWは「1行全体」を受け取ります。
各行の合計を計算:
=BYROW(B2:E100, LAMBDA(row, SUM(row)))

実践:行ごとの複合計算
各社員の「名前 + 部署」を結合:
=BYROW(A2:C100, LAMBDA(row, INDEX(row,,1)&"("&INDEX(row,,2)&")"))


実践パターン集
パターン1:一括データクレンジング
全角スペースを半角に、前後の空白を除去:
=MAP(A2:A100, LAMBDA(v, TRIM(SUBSTITUTE(v, " ", " "))))
パターン2:条件に基づく一括フラグ付け
期限切れデータにフラグを立てる:
=MAP(E2:E100, LAMBDA(date, IF(date<F1, "⚠ 期限切れ", "✅ OK")))
パターン3:BYROW × XLOOKUP
各行の商品コードから商品名を一括取得:
=BYROW(A2:A100, LAMBDA(row, XLOOKUP(INDEX(row,,1), マスタ!A:A, マスタ!B:B, "未登録")))
パターン4:行ごとの最大値の列名を返す
=BYROW(B2:E100, LAMBDA(row,
INDEX(B1:E1,,MATCH(MAX(row),row,0))
))各行で最も大きい値がどの列にあるかを自動判定します。


注意点
パフォーマンス
MAP・BYROWはデータ量が多いと計算に時間がかかることがあります。1万行を超える場合は、QUERY関数での代替を検討してください。
デバッグ
LAMBDAの中身が複雑になったら、まず1セルで動作確認してからMAP/BYROWに組み込みましょう。
まとめ
LAMBDA:名前のない関数を定義する(MAP・BYROWの心臓部)
MAP:配列の各要素に同じ処理を適用(1対1変換)
BYROW:各行に処理を適用(行全体を使った計算)
繰り返し作業を1つの数式で完結させられる
XLOOKUP等と組み合わせれば、さらに強力に
次回予告
次回はいよいよ実践編。これまで学んだ関数を総動員して、売上レポートをゼロから自動構築します。データ取り込みから集計、ランキング作成まで、実務で即使えるテンプレートを一緒に作りましょう。