はじめに:その連番、行を削除しても大丈夫ですか?
前回の記事では、INDIRECT関数と「R1C1形式」を使って、常に左隣を参照するテクニックを紹介しました。
この記事は、前回の記事、Excelで常に「左隣のセル」を参照する数式の作り方の応用編になります!まだの方は先に以下の記事をぜひご覧ください。
今回は、その知識をフル活用して、実務で役立つ(?)「最強の連番」を作ってみましょう!
普通の連番(=A1+1など)だと、途中の行を削除するとエラーになったり、コピーする場所が変わると修正が必要だったりしますよね。
今回目指すゴールは、以下の条件をすべて満たす数式です。
- どこから始めても「1」になる。(A1セルでも、C5セルでも!)
- 途中に空白行があると、自動で「1」にリセットされる。
- コピペしても、行を削除しても壊れない。
【前提条件】
「途中に空白」と書きましたが、今回は文字列などが入力されているイレギュラーなケースは想定していません。
やろうと思えばできるのですが、今回はロジックの理解を最優先するため、あくまで「空白セルで連番をリセットする」というシンプルなルールで進めます!
さらに応用編として、「A, B, C…」と続くアルファベットの連番も作ります。
ちょっとマニアックですが、知っておくと数式を驚くほどシンプルに書けるようになりますよ!
本記事では、無料のWeb版Excelを使用して検証および画像の作成を行っています。Windowsはもちろん、MacやLinuxの方もブラウザさえあれば挑戦できます!
ミッション1:どこでも「1」から始まる連番を作れ!
方法1:関数5つの合体技(A1形式の考え方)
まずは、R1C1形式を使わずに、馴染みのある関数を組み合わせて作ってみましょう。
ロジックは「自分のすぐ上のセルの値を見て、それに1を足す」です。
数式と解説
=IFERROR(INDIRECT(ADDRESS(ROW()-1,COLUMN(),4)),0)+1
うーん、長いですね!中身を分解して見てみましょう。
1. ADDRESS(ROW()-1, COLUMN(), 4)
「自分の行番号 – 1」と「自分の列番号」を使って、一つ上のセルの住所(番地)を作ります。
もしC5セルなら、”C4″という文字ができます。


2. INDIRECT(...)
その住所(”C4″)の中身を見に行きます。
もし上に「1」が入っていれば、「1」を持ってきます。空白であれば、「0」を返します。


3. IFERROR(..., 0)
ここが重要です!なぜエラー処理が必要なのでしょうか?
もし、この数式をシートの1行目(A1など)に入力したとします。
すると、ROW()-1は「0」になりますよね。
しかし、ADDRESS関数の行番号に「0」を渡すと、Excelは「0行目なんてないよ!」と#VALUE!エラーを出してしまいます。


そこで、「エラーが出たら(=自分が先頭行なら)、上の値は0だとみなす」という処理をしています。
4. ... + 1
最後に1を足します。
- 上が「1」なら → 1+1 = 2
- 上が「空白」なら → 0+1 = 1 (リセット!)
- 自分が「1行目」なら → 0+1 = 1 (スタート!)
これで、どこに置いても、空白があっても正しく動く連番の完成です。


方法2:R1C1形式なら、こんなに短い!
では、前回の記事で取り上げた「R1C1形式」を使ってみましょう。
驚かないでくださいね。数式はこれだけです。
数式と解説
=INDIRECT("r[-1]c",0)+1
たったこれだけ!?
はい、これだけで先ほどの長い数式と全く同じ動きをします。
INDIRECT("r[-1]c", 0)
これは「相対的に1つ上の行(Row -1)、同じ列(Column)」の値を参照します。
【ここが凄い!】
このR1C1形式の場合、不思議なことに1行目に入力してもエラーになりません。
Excelが内部で「参照先がない(シートの外だ)」と判断し、エラーではなく「0」のような扱い(あるいは無視して計算可能な状態)にしてくれるため、IFERROR関数が不要になるのです。
5つの関数を組み合わせていた処理が、INDIRECTひとつで完結してしまいました。
これがR1C1形式の威力です。
動作検証:連番はリセットされるか?
では、この数式(R1C1版)を、任意のセルに10行ほどズラッと貼り付けてみましょう。
そして、わざと真ん中あたりの数式を消して、空白にしてみます。


どうでしょう?
空白になったことで、空白の下の数式は「上のセル(空白)+ 1」を計算し、「1」にリセットされました!
また、この数式は「常に相対的な上」を見ているため、途中の行を削除しても#REF!エラーにならず、自動的に連番が修復されます。
これが「コピペで使い回せる最強の連番」です!
応用編:アルファベット順(A, B, C…)を表示せよ!
数字ができるなら、アルファベットもできるはず!
「A, B, C…」と続き、空白があればまた「A」に戻るリストを作ってみましょう。
ただし、今回はロジックの理解を優先するため、「Z」の次が「AA」になるような文字数の増加や繰り返しは一切考慮していません。
あくまでシンプルなアルファベット連番として考えてくださいね。
方法3:文字コードを操る(A1形式)
数式と解説
=UNICHAR(65+IFERROR(UNICODE(INDIRECT(ADDRESS(ROW()-1,COLUMN(),4)))-64,0))
少し複雑に見えますが、やっていることは「数字」の時と同じです。
1. UNICODE(…): 上のセルの文字を「文字コード(数値)」に変換します。
「A」なら65、「B」なら66です。


2. … – 64: 文字コードから64を引いて、1始まりの数字にします。(A=1, B=2…)


3. IFERROR(…, 0): もし上が空白や1行目の場合は、エラーになるので「0」にします。
4. 65 + …: 基準となる「65(Aのコード)」に、計算した数値を足します。
- 上が「A(1)」なら → 65 + 1 = 66(Bのコード)
- 上が「空白(0)」なら → 65 + 0 = 65(Aのコード)


5. UNICHAR(…): 最後にコードを文字に戻します。


方法4:やっぱりR1C1形式ならシンプル!
これをR1C1形式で書くと、こうなります。
数式と解説
=UNICHAR(65+IFERROR(UNICODE(INDIRECT("r[-1]c",0))-64,0))
だいぶスッキリしましたね!
【注意点】
「あれ?さっきはIFERRORがいらなかったのに?」
鋭いですね!
確かに INDIRECT("r[-1]c",0) 自体は、1行目や空白セルを参照すると「0」を返します。
しかし、その「0」を UNICHAR関数 に渡すと、ここで#VALUE!エラーが発生してしまいます。
(文字コード0は制御文字などの特殊な扱いになるためです。)


そのため、アルファベット版では、UNICHAR関数の部分を守るためにIFERRORが必要になるのです。
動作検証:アルファベットもリセットされるか?
こちらも検証してみましょう。
任意の列に数式を貼り付け、途中を空白(クリア)にしてみます。


バッチリですね!
途中に空白を入れるだけで、グループ分けされたアルファベットリストが簡単に作成できました。
まとめ:R1C1は、数式ダイエットの味方
ADDRESSやROWをごちゃごちゃ組み合わせなくても、INDIRECT("r[-1]c",0) という呪文ひとつで、数式はこんなにもシンプルになります。
「常に相対的な位置を見る」というR1C1形式の特性を理解していれば、今回のような連番だけでなく、累計計算や前月比の計算など、様々な場面で「コピペに強い数式」を作ることができます。
マニアックな知識に見えて、実は実務を楽にする近道。
ぜひ使ってみてくださいね!



