SkillStack Lab 運営者の「スタック」です。
毎日の業務でデータの通し番号(No.)や日付スケジュールを入力するとき、まだ手入力やオートフィルのドラッグ操作で消耗していませんか?
「行を削除したら番号がズレてしまい、1から振り直し…」「フィルタをかけたら番号が飛び飛びになって使い物にならない…」というのは、エクセルを使っていれば誰もが一度は経験する「あるある」ですよね。
実は、オートフィルや手作業に頼らなくても、適切な関数を使えば「メンテナンス不要の連続データ」を定義することができます。
これにより、行の削除や挿入、並べ替えを行っても、自動的に番号が再計算され、常に正しい連番が維持されるようになります。
この記事では、Excel 2021以降の標準であるSEQUENCE関数から、従来のバージョンでも使えるROW関数の堅牢なテクニック、さらには実務で必須となる「土日除外」や「フィルタ連動」の高度な設定までを網羅的に解説します。
毎月のルーチンワークを少しでも楽にするために、ぜひ参考にしてみてください。
- 最新のSEQUENCE関数による動的な連番生成とその仕組み
- 行を削除・挿入しても番号がズレないROW関数のロジック
- 土日や祝日を自動で除外した「稼働日ベース」の日付作成
- フィルタリングや条件分岐に応じた高度なナンバリング手法
エクセル関数で連続データを生成する基礎
まずは、エクセルで連続データを作成するための基本的な考え方と、従来の手法よりも圧倒的に効率的な関数の使い方について見ていきましょう。
これを覚えるだけで、単純作業の時間がぐっと減り、ミスもなくなります。
オートフィルより便利な関数の連番
エクセルを使っていると、セルの右下をドラッグする「オートフィル」機能にお世話になることが多いですよね。
直感的で非常に便利ですが、こと「データ管理」の観点からは、オートフィルで作成した連番には「静的(Static)なデータになってしまう」という致命的な弱点があります。
静的データの何が問題なのか?
例えば、オートフィルでA列に「1, 2, 3, 4, 5…」と入力したとします。
この後、業務の都合で「3」の行(3行目)を削除する必要が出てきたとしましょう。
オートフィルの限界

行を削除すると、データは「1, 2, 4, 5…」という並びになります。
当然ですが、削除された「3」は消えたままで、それ以降の数字も繰り上がりません。これを修正するには、もう一度上からオートフィルをし直す必要があります。
数行ならまだしも、これが数千行あるデータだった場合、修正の手間は馬鹿になりませんし、修正漏れがあればデータの整合性が失われます。
関数を使う最大のメリット:動的な再計算
関数で連続データを作成すると、セルに表示される数値は固定された「値」ではなく、常に「その瞬間の計算結果」として表示されます。
そのため、行の削除や挿入を行っても、エクセルが瞬時に番号を再計算し、自動的に「1, 2, 3…」と正しい連番を維持してくれるのです。
私がまだエクセル初心者だった頃、リストの修正があるたびに連番を振り直していましたが、関数による「定義」の方法を知ってからは、その作業自体が完全に不要になりました。
まずは「入力する」のではなく「計算させる」という意識に変えていきましょう。
最新SEQUENCE関数で自動入力
もしあなたがExcel 2021やMicrosoft 365を使っているなら、このSEQUENCE関数が間違いなく最強のツールになります。
これは「動的配列(スピル)」という新しい概念を使った関数で、たった一つのセルに数式を入れるだけで、指定した範囲に連番がドバーッと展開されます。
SEQUENCE関数の構文と仕組み

使い方は非常にシンプルですが、奥が深いです。
| 引数 | 説明 | 指定例 |
|---|---|---|
| 行 | 生成したいデータの行数(必須) | 10(10行分作成) |
| 列 | 生成したいデータの列数 | 1(省略可能) |
| 開始 | 連番の開始値 | 1(省略時は1から) |
| 目盛り | 増分値(ステップ) | 1(省略時は1ずつ増加) |
例えば、A1セルに =SEQUENCE(10) と入力するだけで、A1からA10まで「1〜10」が自動的に入力されます。これを「スピル(あふれ出る)」と呼びます。
COUNTA関数との連携で完全自動化
さらに実務的なテクニックとして、データが入っている行数に合わせて連番の数を自動調整する方法があります。
数式例:=SEQUENCE(COUNTA(B:B)-1)
B列にデータが入っており、1行目が見出しの場合、B列のデータ数から見出し分(-1)を引いた数だけ連番を生成します。これなら、B列にデータを追加するだけで、勝手にA列の連番も伸びていきます。
参考情報
SEQUENCE関数の詳細な仕様やエラー(#SPILL!など)の対処法については、Microsoftの公式サポートページも参照してください。(出典:Microsoft サポート『SEQUENCE 関数』)
ROW関数で行削除でも崩れない設定
会社の環境によっては、古いバージョンのエクセル(Excel 2016や2019の永続ライセンス版など)を使わなければならないこともありますよね。
そんな時に役立つのが、昔からの定番であるROW関数を使ったテクニックです。
ROW関数はシンプルに「そのセルの行番号」を返す関数です。これをうまく計算式に組み込むことで、物理的な行の位置に基づいた連番が作れます。
堅牢な数式の作り方

よくある間違いとして =ROW() – 1 (2行目から始まるから、行番号から1を引く)のような単純な式を使ってしまうことがあります。
これでも動きますが、表全体を切り取って別の場所に移動させた場合などに計算がズレるリスクがあります。
より堅牢で、プロフェッショナルな書き方は以下の通りです。
推奨される数式:=ROW() – ROW($A$2) + 1(※データがA2セルからスタートする場合)
なぜこの式が良いのか?
- ROW():現在の行番号を取得します(例:5行目なら「5」)。
- ROW($A$2):連番の「開始位置」の行番号を取得します。絶対参照($)がついているため、どこにコピーしても「2」のままです。
- 計算ロジック:「現在の位置」と「開始位置」の差分を取り、それに「+1」をすることで、表が何行目から始まっていても必ず「1」からスタートするように補正されます。
このロジックを組んでおけば、行を削除しても自動的に詰められますし、途中に行を挿入しても数式をコピーすればすぐに正しい連番になります。
文字列と結合したIDを関数で作る
実務では単なる「1, 2, 3」という数字ではなく、「EMP-001」「INV-2023-005」のような、特定のプレフィックス(接頭辞)や桁埋め(ゼロパディング)を含むIDが必要な場面も多いですよね。
これも関数を使えば一発で定義できます。使うのは文字列結合演算子「&」と、数値をフォーマットするTEXT関数です。
TEXT関数による桁揃え

TEXT関数は、数値を指定した書式の文字列に変換します。特に「000」のような指定はID生成に必須です。
ID自動生成の数式例
=”EMP-” & TEXT(SEQUENCE(100), “0000”)
この数式の挙動を分解してみましょう。
- SEQUENCE(100) → 1, 2, … 100 という数値を生成。
- TEXT(…, “0000”) → 数値を4桁の文字列に変換。「1」なら「0001」、「10」なら「0010」になります。
- “EMP-” & … → 文字列同士を結合。結果として「EMP-0001」が生成されます。
もしSEQUENCE関数が使えない環境なら、前述のROW関数と組み合わせて以下のように記述します。= “EMP-” & TEXT(ROW() – ROW($A$2) + 1, “0000”)
手入力で「001」と打つと、エクセルが気を利かせて「1」に変換してしまい、「違う、そうじゃない!」とイラッとした経験はありませんか?TEXT関数を使えば、そんなストレスからも完全に解放されます。
指定した回数で数値を繰り返す方法
少し応用的な使い方ですが、「1, 1, 1, 2, 2, 2…」のように、同じ数字を特定の回数だけ繰り返して、その後にカウントアップさせたい場合もあります。
例えば、3人のチームごとにグループIDを振ったり、商品をロット単位で管理したりする時などです。
これは、割り算と「切り上げ」の数学的な特性を利用するとスマートに解決できます。ROUNDUP関数を使用します。
繰り返しパターンの数式ロジック

数式例(3回ずつ繰り返す場合):=ROUNDUP(SEQUENCE(30) / 3, 0)
なぜこれで繰り返しができるのでしょうか?数字の動きを追ってみましょう。
| 連番 | 3で割った値 | ROUNDUP(…, 0)の結果 |
|---|---|---|
| 1 | 0.333… | 1 |
| 2 | 0.666… | 1 |
| 3 | 1.000 | 1 |
| 4 | 1.333… | 2 |
| 5 | 1.666… | 2 |
このように、連番を「繰り返したい回数」で割り、その結果を「切り上げ」することで、階段状に増えていく数列を作ることができます。
パズルみたいですが、このロジックを知っていると「このデータ、3行セットでIDを振りたいんだけど…」と相談された時に、即座に対応できるようになりますよ。
エクセル関数で高度な連続データを管理
ここからは、もう少し踏み込んだ「現場レベル」の内容になります。フィルタリングで見えている行だけに番号を振ったり、土日を除いたスケジュール表を作ったりと、実務で直面する課題を解決するテクニックを紹介します。
フィルタの非表示行を無視する連番
大きなリストを扱う際、オートフィルタで特定の条件(例:東京都の顧客のみ)に絞り込むことは日常茶飯事です。
しかし、通常のROW関数やSEQUENCE関数だと、フィルタで隠れた行もカウントしてしまい、表示される連番が「1, 5, 8, 12…」のように飛び飛びになってしまいます。
見積書や提出用のリストを作成する際は、「今見えているデータ」に対して、上から順にきれいに1, 2, 3…と振り直したいですよね。
SUBTOTAL関数(可視セル集計)の活用

これを実現するのがSUBTOTAL関数です。この関数は、フィルタリングによって非表示になった行を計算対象から除外する機能を持っています。
可視セルのみ連番を振る魔法の数式
=SUBTOTAL(3, $B$2:B2)
この数式のポイントは2点あります。
- 引数「3」:これは「COUNTA(データの個数)」を指定するコードですが、SUBTOTAL関数の中では「フィルタで非表示の行を無視する」という動作になります。
- 範囲指定 $B$2:B2:始点($B$2)を絶対参照で固定し、終点(B2)を相対参照にしています。数式を下にコピーすると、範囲が $B$2:B3, $B$2:B4… と広がっていきます。
この仕組みにより、各行において「自分より上にある、見えているセルの個数」をカウントすることになり、結果としてフィルタをかけるたびに動的に「1」から連番が振り直されます。
これを使っていると、同僚から「どうやってるの!?」と驚かれること間違いなしです。
土日や祝日を除く日付の連続データ
プロジェクトのスケジュール表(ガントチャート)や勤務管理表を作る際、カレンダー通りの日付ではなく「稼働日」だけの連続データが欲しいことがよくあります。
単純に「+1」をしていくと土日が含まれてしまいますが、後から手作業で土日行を削除するのはあまりに非効率です。
ここで活躍するのがWORKDAY関数、あるいは週末の曜日を自由に設定できるWORKDAY.INTL関数です。
WORKDAY関数の実践的な使い方

基本の数式:=WORKDAY(開始日セル, 1, 祝日リスト範囲)
この関数は、指定した日付から「土日」および「指定した祝日リストにある日」を除外した、翌営業日(1日後)の日付を返してくれます。
手順のステップ
- 祝日リストの作成:別シートに、今年の祝日データを入力したリストを作成します(例:HolidaysシートのA列)。
- 開始日の入力:A1セルにスタート日(例:2023/4/1)を入力します。
- 数式の入力:A2セルに =WORKDAY(A1, 1, Holidays!$A$1:$A$20) と入力し、下にコピーします。
これで、ゴールデンウィークや年末年始も自動でスキップした工程表が一瞬で完成します。
もし「火・水が定休日」というようなシフト制の場合は、WORKDAY.INTL関数を使えば、「週末」として扱う曜日を自由にカスタマイズ(例:”0110000″など)することも可能です。
注意点:シリアル値について
関数を入力した直後、結果が「44927」のような数字で表示されることがあります。これはエクセル内部での日付の扱い(シリアル値)です。
慌てずに、セルの書式設定(Ctrl+1)から「日付」形式を選択すれば、正しく「2023/1/1」のように表示されます。
条件付きで番号を振るIF関数の活用
表の中に、視認性を良くするための「空白行」や「区切り行」が含まれていることはありませんか?その場合、単純に連番を振ると空白行にも番号がついてしまいます。
「データが入っている行にだけ、番号を振りたい」というケースです。
そんな時は、条件分岐のIF関数と、最大値を求めるMAX関数を組み合わせます。
数式例:=IF(B2=””, “”, MAX($A$1:A1) + 1)
ロジックの解説
- IF(B2=””, “”, …):もしB列(データ列)が空白なら、番号(A列)も空白にします。
- MAX($A$1:A1) + 1:空白でない場合、「自分のひとつ上のセルまでの範囲」にある数値の最大値を探し、それに1を足します。
この「MAX関数で最大値を探す」という手法を使うことで、途中に空白行が挟まっても、その空白をスキップして、次のデータ行で「直前の番号 + 1」が正しく計算されます。
非常に汎用性が高いテクニックです。
テーブル機能で数式を自動拡張する
これまで紹介した関数テクニックを、さらに強力かつメンテナンスフリーにするのが、エクセルの「テーブル機能(Ctrl + T)」です。
通常のセル範囲を「テーブル」に変換すると、エクセルはその範囲を「ひとつのデータベース」として認識します。これには、連続データ管理において絶大なメリットがあります。

オートフィル不要の自動拡張
テーブル設定された範囲の最下行の直下に、新しいデータを入力してみてください。
すると、テーブルの範囲が自動的に拡張され、設定しておいた連番の数式(ROW関数やIF関数など)が、新しい行にも勝手にコピーされます。
構造化参照のメリット
テーブル内では数式が「A1」のようなセル番地ではなく、=[@単価]*[@数量] のような「構造化参照」という形式で管理されます。
これにより、列全体で常に同じ数式が適用されることが保証されるため、うっかり数式を消してしまったり、一部だけ式が違ったりするミスを根絶できます。
連続データを扱うリストは、可能な限りテーブル化することを強くおすすめします。
加算や乗算で規則的な数列を作る
最後に、単純な「+1」の連番だけでなく、数学的な規則性を持つ数列の作り方を紹介します。
これも最新のSEQUENCE関数なら引数を変えるだけで自由自在です。
等差数列(一定の数ずつ増える)
「10, 20, 30…」のように10ずつ増やしたい場合。
数式: =SEQUENCE(10, 1, 10, 10)(第3引数「開始」を10、第4引数「目盛り」を10に設定)
等比的な活用
第4引数にはマイナスの値も設定できます。「100, 99, 98…」のようなカウントダウンも簡単ですし、開始日を日付にして、目盛りを「7」にすれば、「毎週月曜日の日付リスト」なども一瞬で作成可能です。
従来の方法だと、最初の2つのセルを入力して「エクセルにパターンを認識させてからドラッグ」する必要がありましたが、関数なら定義を変更するだけで修正も一瞬です。
ゴルフのスコア管理表を作る時なんかにも、ホール番号やパー数を規則的に配置するのに役立ったりしますよ。

💡 「エクセルでの業務効率化」に限界を感じていませんか?
関数を使ったデータの自動生成は非常に便利ですが、毎月の請求管理や勤怠管理といった「絶対に間違えられない定型業務」を、複雑なエクセルファイルで無理に運用し続けるのは、実はかなりの時間と労力(コスト)がかかります。
「関数やマクロのエラーに怯える日々から抜け出したい」
「誰かが休むと業務が回らない『エクセル属人化』を根本から解消したい」
そう感じたことのある総務・経理・バックオフィス担当者に向けて、元社内SE・現役管理職の視点で「日々の定型業務を劇的に楽にする脱エクセル(SaaS)ツール」を厳選しました。
いきなり会社で稟議を通す必要はありません。時間を無駄にせず業務を効率化したい方は、まずはノーリスクの無料登録や資料請求を活用して、専用ツールの圧倒的な「ラクさ」をご自身の目で確かめてみてください。
\ エクセルの手作業を今日でやめるなら /
エクセル関数と連続データの総括
今回はエクセルで連続データを関数を使ってスマートに生成・管理する方法について、基礎から応用まで詳しく解説しました。
手入力やオートフィルは手軽ですが、データの変更や削除に弱いという構造的な欠点があります。
一方で、SEQUENCE関数(最新環境向け)やROW関数(互換性重視)、そしてフィルタ用のSUBTOTAL関数などを適切に使い分けることで、メンテナンスが不要で、かつミスのない堅牢なデータシートを作ることができます。
最初は数式を組むのが少し難しく感じるかもしれませんが、一度「自動化する仕組み」を作ってしまえば、その後の作業効率は段違いです。
ぜひ、ご自身の業務環境や目的に合わせて、最適な関数を選んでみてください。
正確な仕様や最新の関数対応状況については、Microsoftの公式サイト等も併せてご確認くださいね。
