
🧩 スプレッドシートでBYROW関数を使いこなす〜「行ごとに考える」中級者のための新しい書き方〜
スプレッドシートを中級レベルで使っていると、
ARRAYFORMULAで自動化した結果、
シートが重くなった
数式が読めなくなった
修正が怖い
という壁にぶつかることがあります。
そんなときに選択肢として出てくるのが BYROW関数 です。
BYROWは「配列を行単位で処理する」ための関数で、
重さ・可読性・設計 のバランスを取りやすいのが特徴です。
この記事では、
BYROWとは何か/なぜ軽く感じるのか/どんな場面で使うべきか
を実務目線で整理します。
📌 BYROW関数とは?
BYROWは、指定した範囲を 1行ずつ処理 し、
その結果を縦に返す関数です。
基本構文はこちらです。
=BYROW(範囲, LAMBDA(行の値, 処理))
ポイントは LAMBDA。
「この1行に対して、どう処理するか」を書きます。
👉 ARRAYFORMULAが「列全体を見る」のに対して、
👉 BYROWは「1行ずつ考える」関数です。
📄 サンプルデータ
まずは、以下を A1:C7 に貼り付けてください。
日付 商品名 売上金額
2025-01-05 Tシャツ 2800
2025-01-08 パンツ 5200
2025-01-10 ニット 9800
2025-01-15 バッグ 12500
2025-01-18 帽子 1800
2025-01-22 パンツ 4600

この「売上金額」に応じてランクを付ける例で考えます。
🔄 ARRAYFORMULAでよくある書き方
まずは、よくあるARRAYFORMULAの例です。
=ARRAYFORMULA(
IF(C2:C="","",
IF(C2:C>=10000,"A",
IF(C2:C>=5000,"B","C")
)
)
)

動きますが、実務では次の問題が出やすくなります。
C列の空白行すべてを常に監視
行数が増えるほど再計算が重くなる
ロジックが詰まりやすい
🧠 BYROWで同じ処理を書いてみる
同じランク判定をBYROWで書くと、こうなります。
=BYROW(
C2:C,
LAMBDA(x,
IF(x="","",
IF(x>=10000,"A",
IF(x>=5000,"B","C")
)
)
)
)

一見少し難しそうですが、
xは仮の値(変数)を入れるところ。
つまりx = その行の売上金額 と考えるとシンプルです。
📌 BYROWが「軽く感じる」理由
BYROWが実務で好まれる理由は、次の点にあります。
① 行単位で処理が完結する
ARRAYFORMULAは「列全体」を前提にしますが、
BYROWは 1行ずつ評価 します。
👉 無駄な再計算が起きにくい構造です。
② 複雑な条件と相性がいい
IF、REGEXMATCH、複数条件などを組み合わせても、
「1行の話」として読めます。
👉 数式の意味が追いやすくなります。
③ 補助列の代替になる
本来なら
判定用列
フラグ列
表示列
と分けていた処理を、
行単位のロジックとしてまとめられる のがBYROWの強みです。
🧩 複数列を使ったBYROWの例
BYROWは、1列だけでなく 複数列をまとめて処理 できます。
例:
「売上金額が5000以上 かつ 商品名がパンツならOK」
=BYROW(
A2:C,
LAMBDA(r,
IF(
AND(INDEX(r,3)>=5000, INDEX(r,2)="パンツ"),
"OK",
""
)
)
)

ここでの考え方は、
r = その行(A~C列のセット)
INDEX(r,列番号) で値を取り出す
👉 「1行を1つのオブジェクトとして扱う」感覚です。
⚠️ BYROWを使うときの注意点
便利ですが、万能ではありません。
単純な列変換だけならARRAYFORMULAの方が楽
LAMBDAに慣れていないと最初は読みにくい
全列指定(A2:Cなど)は必要最低限にする
👉 重さ・複雑さを感じたときの選択肢
として使うのがちょうど良いです。
🧠 使い分けの判断基準
迷ったら、この基準で考えます。
単純な処理・全列一括 → ARRAYFORMULA
条件が多い・行単位判断 → BYROW
「ARRAYFORMULAで重い/読めない」と感じたら、
BYROWに切り替えるだけで改善するケースは多いです。
📝 今回のまとめ
BYROWは、
スプレッドシートを 行単位で考えるための関数 です。
覚えておきたいポイントはこの3つ。
BYROWは1行ずつ処理する
複雑な条件ほど真価を発揮する
ARRAYFORMULAの代替として使える
自動化は「全部一気に」より、
無理なく・軽く・読める形 が正解。
BYROWは、そのための
中級者にとって非常に心強い選択肢です 🧩✨