
この記事では、Excelとスプレッドシートの両方で使える、「同じ値に同じ番号を振る」方法と「同じグループ内で連番を振る」方法を解説します。初心者の方でもすぐに使えるように、分かりやすい数式と手順を解説しているので、ぜひ参考にしてください。
同じ項目に同じ番号を振る方法
データに連番を振るときに、同じ値がある場合は同じ番号を振る方法です。Excel2021以降やスプレッドシートの場合は、UNIQUE関数とXLOOKUP関数を使う方法がおすすめです。
UNIQUE関数とXLOOKUP関数を使う方法

この方法では、作業列を使用します。まず、作業列にUNIQUE関数で、データ範囲から一意の項目を取得します。
例: =UNIQUE(D2:D7)
次に、取得した一意の項目の隣に連番を振ります。
UNIQUE関数の引数:(範囲, [列の比較], [回数指定])

そして、XLOOKUP関数で、検索キーに連番を振りたい値(例:D2)を、検索範囲にUNIQUE関数で取得した一意の項目を、結果の範囲に連番を指定します。
例: =XLOOKUP(D2,$B$2:$B$4,$A$2:$A$4)
ポイント: 検索範囲と結果の範囲は、絶対参照($を付ける)にします。これにより、数式をコピーして連番を生成できます。
XLOOKUP関数の必須要素:(検索キー, 検索範囲, 結果の範囲)
UNIQUE関数が使えない場合

UNIQUE関数が使えない場合は、以下の数式で同じ結果を得られます。
まず、連番を振る先頭のセル(例:B2)に「1」を手入力します。
次に、その下のセル(例:B3)に以下の数式を入力し、オートフィルでコピーします。
例:=IFERROR(INDEX($B$2:B2,MATCH(A3,$A$2:A2,0)),MAX($B$2:B2)+1)
INDEX関数の構成要素:(参照, 行番号, [列番号])

数式の解説
- MATCH関数
- 検索値
A3が、その上の範囲($A$2:A2)に既に存在するかを探します。存在する場合は、その行番号を、存在しない場合は、エラー(#N/A)を返します。
- 検索値
- INDEX関数
- MATCH関数の行番号を使って、連番が振られている範囲(
$B$2:B2)から対応する番号を取り出します。
- MATCH関数の行番号を使って、連番が振られている範囲(
- IFERROR関数
- MATCH関数がエラー(初めて出現する値)の場合に、それまでに振られた連番の最大値に
1を足した新しい番号を振ります。
- MATCH関数がエラー(初めて出現する値)の場合に、それまでに振られた連番の最大値に
ポイント: MATCH、INDEX、MAXの3つの関数すべてで、開始位置のみを絶対参照($を付ける)にします。これにより、数式をコピーしたときに範囲が1行ずつ拡張され、連番を生成できます。
MATCH関数の引数:(検査値, 検査範囲, [照合の種類])
INDEX関数の引数:(参照, 行番号, [列番号])
IFERROR関数の引数:(値, [エラー値])
同じ項目に連番を振る方法

データに連番を振るときに、同じ値をグループとして、グループ内で連番を振る方法です。
たとえば、A列にある「赤、青、緑」に、グループ内で連番を振りたい場合、COUNTIF関数を使います。
例:=COUNTIF(A$1:A1,A1)
ポイント: 条件範囲は、開始位置のみ絶対参照($を付ける)にします。これにより、数式をコピーしたときに範囲が1行ずつ拡張され、「そのグループで何番目か」をカウントできます。
COUNTIF関数の引数: (条件範囲,検索条件)