Excelで常に「左隣のセル」を参照する数式の作り方

Excelで常に「左隣のセル」を参照する数式の作り方 Excel

はじめに:数式が「追いかけてくる」問題

Excelで資料を作ったり、ブログ用の画像を作ったりしているとき、こんな経験はありませんか?

「A1セルの内容を表示したいから、B1セルに =A1 って入れたのに、A1セルを移動させたら数式が勝手に書き換わっちゃった!」

Excelの説明画像

Excelは非常に賢いので、セルを移動させると「あ、参照先のデータが引っ越したんだな! 数式も直しておいてあげるね!」と、自動的に参照先を追尾してくれます。

しかし、時としてその「優しさ」が仇になることがあります。

この技術、実は私(筆者)も、ブログ記事用に数式を表示させるときなどに愛用している、地味ながら最強の「コピペ用ツール」なんです!

本記事では、無料のWeb版Excelを使用して検証および画像の作成を行っています。Windowsはもちろん、MacやLinuxの方もブラウザさえあれば挑戦できます!

実験!なぜ普通の数式ではダメなのか?

まずは、Excelが普段どのように振る舞うのか、実験してみましょう。

【実験の準備】

  1. B2セルに、適当な数式 =1+2+3 を入力します。
  2. その右隣、C2セルに、B2の数式を表示する関数 =FORMULATEXT(B2) を入力します。
Excelの説明画像

ここまでは順調ですね。では、意地悪をしてみましょう。

実験1:参照元のセルを移動させる

B2セルをドラッグ&ドロップ(または切り取り&貼り付け)して、D6セルに移動させてみてください。

C2セルの数式はどうなりましたか?

=FORMULATEXT(D6)

勝手に書き換わってしまいました!

Excelが「参照先がD6に引っ越したから、追いかけなきゃ!」と判断したのです。

Excelの説明画像

実験2:絶対参照ならどうだ?

「なら、$マークをつけて絶対参照にすればいいじゃない!」と思いますよね?

C2セルの数式を =FORMULATEXT($B$2) にして、もう一度B2セルを移動させてみましょう。

結果は…やはり =FORMULATEXT($D$6) に書き換わってしまいます。

Excelの説明画像

【なぜこうなるの?】
Excelの「絶対参照($)」は、「数式をコピー(オートフィル)した時にズレないようにする」ための機能です。
「参照先のセル自体が移動した時」には、Excelは「そのセル自体」を追いかけ続けてしまうのです。

つまり、普通の書き方では「常に左隣を見る」という固定はできません。

そこで登場するのが、関数の組み合わせ技です!


解決策1:INDIRECT + ADDRESS + ROW + COLUMN のコンビネーション

まずは、正攻法(?)で攻めてみましょう。

Excelには「文字で書かれた住所(セル番地)を、実際の参照に変換する」というINDIRECT(インダイレクト)関数があります。

Excelの説明画像

これを使って、「自分の位置から見て、左隣の住所」を計算で作り出します。

数式と解説

=FORMULATEXT(INDIRECT(ADDRESS(ROW(),COLUMN()-1,4)))

うーん、長いですね!でも、中身はシンプルです。
内側から分解してみましょう。

1. ROW() と COLUMN()

引数を省略すると、数式が入っている「自分自身の」行番号と列番号を返します。

C2セルなら、ROW()は「2」、COLUMN()は「3」です。

Excelの説明画像

2. COLUMN() – 1
自分の列番号から1を引きます。つまり「3 – 1 = 2」。
これが「左隣の列」を意味します。

3. ADDRESS(行, 列, 4)
指定した行と列の「セル番地(文字列)」を作ります。

第3引数の「4」は「相対参照(A1形式)」で返す指定です。
ADDRESS(2, 2, 4) となり、結果は文字の “B2” になります。

Excelの説明画像

4. INDIRECT(“B2”)
最後に、文字の”B2″を、実際の「B2セルの参照」に変換します。

ちょっと寄り道:INDIRECT関数ってなに?

INDIRECT関数、名前は聞くけど使い方がよく分からない…」という方も多いのではないでしょうか。

INDIRECT関数は、一言で言うと「文字列を、本物のセル参照に変身させる関数」です。

例えば、A1セルに「100」と入っているとき、
=INDIRECT("A1") と入力すると、文字の”A1″が住所として認識され、A1の中身である「100」が表示されます。

実務では単体で使うことよりも、他の機能と組み合わせて威力を発揮します。

実験:本当に「左隣」を見続けるのか?

では、この数式が本当に左隣を参照し続けるのか、実験してみましょう。

1. B2セル=1+2+3 が入っています。
2. C2セルに、上記の長い数式
=FORMULATEXT(INDIRECT(ADDRESS(ROW(),COLUMN()-1,4)))
を入力します。

Excelの説明画像

ちゃんと =1+2+3 と表示されますね。

ここで、B2セルの数式を、ドラッグしてD6セルに移動させてみてください。

どうなりましたか?

E6セルに先ほどの数式を入力すれば、左隣(D6)の =1+2+3 が表示されます。
一方、取り残された C2セル はどうなっているでしょう?

#N/A エラーになっているはずです!

Excelの説明画像

これは、C2セルの数式が「B2(移動して空っぽになったセル)」を相変わらず参照し続けている証拠です。

FORMULATEXT関数は、参照先が空だと #N/A を返すからです。

では、空になった B2セル に、新しい数式 =SEQUENCE(5) を入力してみましょう。
すると…C2セルの表示がパッと =SEQUENCE(5) に変わりましたね!

Excelの説明画像

このように、この数式を使えば、隣のセルがどこへ行こうが、消されようが、頑なに「今の左隣」だけを見つめ続けることができるのです。

私はブログ記事の画像を作るとき、このような数式を使って「数式とその結果」をセットでキャプチャーしています。めちゃくちゃ便利ですよ!


解決策2:これぞ本命!「R1C1形式」の呪文

「でも、毎回あんな長い数式を書くのは面倒…」

そうですよね。

実は、もっと短く、もっとスマートに書く方法があります。

VBAを使う人にはお馴染みの「R1C1形式」を使います。

これぞ、私が常用している究極の数式です!

数式と解説

=FORMULATEXT(INDIRECT("rc[-1]",0))

たったこれだけ!

Excelの説明画像

rc[-1] … 初めて見る方も多いかもしれません。これが「R1C1形式」です。

「R1C1形式」とは?

普段私たちが使っている「A1」「B2」といった書き方を「A1形式」と呼びます。

対して、「行(Row)」と「列(Column)」をどちらも数字で表すのが「R1C1形式」です。

【R1C1の読み方】

  • R: 行 (Row)
  • C: 列 (Column)
  • [ ] (角括弧): 「自分から見てどれくらい離れているか」という相対的な距離を表します。
  • [ ] なしの数字: 「1行目」「3列目」といった絶対的な位置を表します。

【例】

  • R1C1 → 1行1列目(つまり$A$1)
  • R[1]C → 自分の「1つ下」の行、同じ列
  • RC[2] → 同じ行、自分の「2つ右」の列
  • R[1]C[-1] → 自分の「1つ下」の行、自分の「1つ左」の列

つまり、今回の数式にある "rc[-1]" は、
「同じ行の、1つ前の列」
すなわち「左隣のセル」を指しているのです!

【INDIRECT関数の第2引数】

INDIRECT(参照文字列, [参照形式])

この第2引数に「0」(またはFALSE)を指定することで、Excelに「今回はA1形式じゃなくて、R1C1形式で指定するよ!」と伝えることができます。

名前定義で「自分専用関数」を作る!

「でも、やっぱり毎回数式を書くのは面倒…」

ならば、ネームマネージャー(名前の定義)と組み合わせると、さらに強力な武器になります。

例えば、先ほどの数式 =FORMULATEXT(INDIRECT("rc[-1]",0)) を、使いたい時に毎回入力するのは、どうしたって面倒ですよね。

そこで、この数式に短い名前をつけて登録してしまいましょう!

【設定手順】

数式」タブ → 「ネームマネージャー」をクリックします。

名前」に、キーボードで打ちやすい名前を入力します。
例えば、左手だけで打てる「asd」などがおすすめです!

参照先」に、先ほどの数式=FORMULATEXT(INDIRECT("rc[-1]",0)) を入力して「保存」をクリック。

Excelの説明画像

これだけで準備完了です。

あとは、数式を表示させたいセルに =asd と入力するだけで…あら不思議!左隣の数式がパッと表示されます。

Excelの説明画像

一回登録さえしてしまえば、たった4文字(=asd)で呼び出せる!

まるで自分だけのショートカット関数を作ったみたいで、ワクワクしませんか?

応用:「上」のセルを参照するには?

R1C1形式を使えば、「すぐ上のセル」を参照するのも簡単です。

=FORMULATEXT(INDIRECT("r[-1]c",0))

r[-1]c は「自分の1つ上の行、同じ列」を意味します。

試しに、この数式を B3セル に入力してみてください。B2セルの数式が表示されますよね?

Excelの説明画像

面白いのは、この数式を 1行目 に入力した場合です。

通常のA1形式で「A1の一つ上」を参照しようとすると、存在しないセルなので #REF! エラーになります。

しかし、このR1C1形式を使った数式では、参照先が存在しない場合でも #REF! ではなく、単に値が取得できない #N/A として扱われることがあります。

(※関数の組み合わせによります。)

Excelの説明画像

数式自体が壊れてしまうのを防げるので、テンプレートなどを作る際にも役立ちますよ!

応用:LEN関数などでも使える!

このテクニックは、もちろんFORMULATEXT以外でも使えます。

例えば、「常に左隣のセルの文字数を数えたい」なら、こうです。

=LEN(INDIRECT("rc[-1]",0))

Excelの説明画像

A1形式(長い方)と比較

=LEN(INDIRECT(ADDRESS(ROW(),COLUMN()-1,4)))

比べてみると、R1C1形式INDIRECT("rc[-1]",0) がいかに短く、可読性が高い(慣れればですが!)かが分かりますね。

まとめ:R1C1を知れば、参照は自由自在!

普段は裏方に隠れている「R1C1形式」ですが、INDIRECT関数と組み合わせることで、非常に強力なツールになります。

知っているか知らないか」、ただそれだけで作業効率に大きな差が出るテクニックです。

次回は、この「R1C1形式」をさらに応用して、

「どこのセルから始めても『1』から始まる連番」
「途中に空白があっても連番をリセットするロジック」
そして「アルファベットの連番(A, B, C…)」

を作る方法を紹介する予定です!

ただの連番と侮るなかれ。

コピペしても壊れない、最強の連番作成術をお楽しみに!

タイトルとURLをコピーしました