フィルターで表示された行だけに1、2、3…と番号を付けるには、固定の行番号ではなく、先頭から現在行までに見えている非空セルの個数を数えます。ExcelのSUBTOTALを使い、必ず値が入る列を数えるのがポイントです。

通常のROW関数で番号が飛ぶ理由

=ROW()-1はシート上の物理行番号を計算するため、絞り込みで行が隠れても番号は変わりません。顧客一覧の2、5、9行目だけが見えている場合でも、結果は1、4、8のままです。表示順の番号と、データを特定するための「受注ID」は役割が違います。受注IDは並べ替えやフィルターで再採番せず、別列で保持してください。

SUBTOTALを使って可視行を数える式

1行目に見出し、B2以降に欠損しない受付IDがあるとします。C2に=SUBTOTAL(103,$B$2:B2)を入力して最終行までコピーします。103は表示中の非空セルを数える指定で、フィルター除外行に加え手動非表示行も数えません。B列が空白だと番号が増えないので、毎行必須のID列を参照します。番号式が入ったC列自体を数えると循環参照になるため避けてください。

抽出条件を変えたときの番号を検算する

フィルターで「対応中」だけを表示し、見えているC列が1から連続するか確認します。フィルターを外すと、再び全行の連番に戻ります。手動で隠した行も除外したくない場合は3と103の挙動を切り分けます。可視行の件数は、ID列を対象にしたSUBTOTAL(103,B2:B100)と、表示されている最終番号を比べます。

並べ替え・テーブル化の前に確認すること

数式の範囲が$B$2:B2のように始点だけ固定されていることが重要です。両端を固定するとすべて同じ数になります。Excelテーブルへの変換後に数式が構造化参照へ変わった場合はコピーした式を点検してください。並べ替え前に固定番号が必要な帳票なら、連番をコピーして「値のみ貼り付け」した別表で保存します。

参考資料

おすすめの記事