こんにちは!
分析官の望月です。
最近、スプレッドシートにおいて結合セルを考慮した上で自動的に連番を振ろうとした時に少し苦労したのでその方法を備忘録的にまとめさせていただきます。
※本記事で紹介する方法よりもスマートな方法がありましたら、ぜひ教えてくださいm(__)m
やりたいコト
下図のように、結合セルを考慮した上で自動的に連番を振っていきます。
※行間にレコードを追加した際にも自動的に連番が振りなおされている状態にしたい。
連番の振り方
一番上のセル(上図A2部)
=ROW()-1
ROW関数
ROW関数は、選択したセルの行番号を返します。今回のケースでは2行目からデータが入っているので1を引くことで1を返します。
それ以外のセル(上図A4, A7, A8, A12, A14, A16部)
=MAX(INDIRECT("$A$2:"&ADDRESS(ROW()-1,COLUMN()))) + 1
こちらはROW, COLUMN, ADDRESS, INDIRECT, MAX関数を利用しており、少し複雑になっています。
COLUMN関数
COLUMN関数は、選択したセルの列番号を返します。今回のケースでは1列目にデータが入っているので1を返します。
ADDRESS関数
ADDRESS関数は、指定した行・列番号に対応するセルのアドレスを返します。今回のケースでは各セルの行番号-1行1列(A列)のセルのアドレスを返します。
例)A12セルにおけるADDRESS関数の返り値:”\$A\$11″
INDIRECT関数
INDIRECT関数は、指定される文字列への参照を返します。今回のケースでは2行A列のセルからADDRESS関数の返り値までのセルを参照します。
例)A12セルにおけるINDIRECT関数の参照:A2からA11までの10個のセル
MAX関数
MAX関数は、指定された範囲の中での最大値を返します。今回のケースではINDIRECT関数によって参照されている範囲の中での最大値を返します。
例)A12セルにおけるMAX関数の返り値:4
最後に+1すれば2,3,4,…と正しく連番が振られていくというロジックになります。
まとめ
いかがでしょうか?個人的にはもう少しスマートな方法があるような気がしてますw
冒頭にも記載した通りですが、よりスマートな方法をご存じの方がいらっしゃいましたらぜひ教えてくださいm(__)m