Excel 空白でリセットされる連番を数式で作る方法

Excel 空白でリセットされる連番を数式で作る方法 Excel

はじめに:その連番、行を削除しても大丈夫ですか?

前回の記事では、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″という文字ができます。

Excelの説明画像

2. INDIRECT(...)
その住所(”C4″)の中身を見に行きます。

もし上に「1」が入っていれば、「1」を持ってきます。空白であれば、「0」を返します。

Excelの説明画像

3. IFERROR(..., 0)
ここが重要です!なぜエラー処理が必要なのでしょうか?

もし、この数式をシートの1行目(A1など)に入力したとします。

すると、ROW()-1は「0」になりますよね。

しかし、ADDRESS関数の行番号に「0」を渡すと、Excelは「0行目なんてないよ!」と#VALUE!エラーを出してしまいます。

Excelの説明画像

そこで、「エラーが出たら(=自分が先頭行なら)、上の値は0だとみなす」という処理をしています。

4. ... + 1
最後に1を足します。

  • 上が「1」なら → 1+1 = 2
  • 上が「空白」なら → 0+1 = 1 (リセット!)
  • 自分が「1行目」なら → 0+1 = 1 (スタート!)

これで、どこに置いても、空白があっても正しく動く連番の完成です。

Excelの説明画像

方法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行ほどズラッと貼り付けてみましょう。

そして、わざと真ん中あたりの数式を消して、空白にしてみます。

Excelの説明画像

どうでしょう?

空白になったことで、空白の下の数式は「上のセル(空白)+ 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です。

Excelの説明画像

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

Excelの説明画像

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

  • 上が「A(1)」なら → 65 + 1 = 66(Bのコード)
  • 上が「空白(0)」なら → 65 + 0 = 65(Aのコード)
Excelの説明画像

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

Excelの説明画像

方法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は制御文字などの特殊な扱いになるためです。)

Excelの説明画像

そのため、アルファベット版では、UNICHAR関数の部分を守るためにIFERRORが必要になるのです。

動作検証:アルファベットもリセットされるか?

こちらも検証してみましょう。

任意の列に数式を貼り付け、途中を空白(クリア)にしてみます。

Excelの説明画像

バッチリですね!

途中に空白を入れるだけで、グループ分けされたアルファベットリストが簡単に作成できました。

まとめ:R1C1は、数式ダイエットの味方

ADDRESSROWをごちゃごちゃ組み合わせなくても、INDIRECT("r[-1]c",0) という呪文ひとつで、数式はこんなにもシンプルになります。

常に相対的な位置を見る」というR1C1形式の特性を理解していれば、今回のような連番だけでなく、累計計算や前月比の計算など、様々な場面で「コピペに強い数式」を作ることができます。

マニアックな知識に見えて、実は実務を楽にする近道。

ぜひ使ってみてくださいね!

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