いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Excel)同じデータに同じ番号を振る方法

 Excelで、同じデータ(重複値)に同じ番号を振る方法についてです。番号はデータの初出順となります。
 同じデータは連続する範囲に固まっていても、飛び飛びになっていてもOKです。

VLOOKUP関数等を使う方法

 まずは番号を振る列の最初の行(C3セル)に「1」を直接入力します。

 


 そして2番目の行(C4セル)に次の式を入力します。

 C4セル

=IFNA(VLOOKUP(B4,B$3:C3,2,FALSE),MAX(C$3:C3)+1)

 VLOOKUP関数により同じ行のB列の値を、上方の各行のB列から検索します。値がみつかったらC列にある番号を取得、みつからなかったら(B列の値は新規データだということになるので)これまでの番号の最大値に1を足したものを生成するという内容です。
 ちょっと複雑ですが2つ下の画像と併せて確認するとわかりやすいかもしれません。



 あとは最後の行(C12セル)までフィルコピーすれば完了となります。



 なお、最後のC12セルの数式は次のようになっています。
 C4セルの式だと検索範囲が1行しかないので意味がわかりにくいですが、こちらの方が少しは見通しやすいと思います。

 C12セル

=IFNA(VLOOKUP(B12,B$3:C11,2,FALSE),MAX(C$3:C11)+1)

 


 なお、C4セルに入力しておく式についてはいくつか例が考えられます。
 以下で2つの例を紹介します。データの左側のセルに番号を表示したい場合はVLOOKUPが使えませんのでこれらを試してみてください。

=IFNA(INDEX(C$3:C3,MATCH(B4,B$3:B3,0)),MAX(C$3:C3)+1)
=IFERROR(AVERAGEIF(B$3:B3,B4,C$3:C3),MAX(C$3:C3)+1)

 上の式はVLOOKUPによる番号の検索をINDEX/MATCHに置き換えたものです。ネストが増えてちょっと複雑になります。
 下の式は表引き関数の代わりにAVERAGEIFで番号を取得しようというものです。発想はトリッキーですが式のつくりは簡単になります。

XMATCH/UNIQUE関数を使う方法

 次の画像ではC3セルに数式を入力してB3~B12のデータを一括採番しています。

 C3セル

=XMATCH(B3:B12,UNIQUE(B3:B12))

 UNIQUE関数で重複を除いたリストを生成しておき、各データをリストから検索して位置を取得するという内容です。
 新しい関数のおかげで簡潔にまとまりますが、そもそもこのような採番する理由は「重複を除いたリストを作成する」であるケースが多いと思われるので、UNIQUE関数が使えるなら実用的な意味は薄いかもしれません。