一般的に使うケースはあまり無いかもしれません。
ですが、ゲーム開発でデータ管理をしようと自分はよく使います。
##こんな表でモンスターを管理したい
Name | Id | Attribution | Rank | Serial |
---|---|---|---|---|
Slime | 100 | 1 | 1 | 0 |
Mermaid | 101 | 1 | 1 | 1 |
Slime | 102 | 1 | 1 | 2 |
Alligator | 103 | 1 | 2 | 0 |
Lizardman | 104 | 1 | 2 | 1 |
Merman | 105 | 1 | 2 | 2 |
Blue Demon | 106 | 1 | 3 | 0 |
Shark Man | 107 | 1 | 3 | 1 |
Sea Dragon | 108 | 1 | 3 | 2 |
Goblin | 200 | 2 | 1 | 0 |
Pumpkin head | 201 | 2 | 1 | 1 |
Fire Lizard | 202 | 2 | 1 | 2 |
Red Demon | 203 | 2 | 2 | 0 |
Dragon Puppy | 204 | 2 | 2 | 1 |
Goblin Sherman | 205 | 2 | 2 | 2 |
カラム名 | 説明 |
---|---|
Name | モンスターの名前 |
Id | 一意な値 |
Attribution | 属性 |
Rank | ランク |
Serial | 属性、ランクごとの連番 |
##IdとかSerialを自動で振りたい
開発中だとモンスターのレコードを増やしたり減らしたり、属性やランクを変更したり、が何度も発生します。
その都度IdやSerialを手動で振り直すのは面倒です。そこで、スプレッドシートの関数を使って自動で振られるようにします。
##Idの振り方(条件ごとに連番)
Idの採番ルールは、百の位が属性、十の位以外が連番なります。
なので、属性ごとに連番が振られるように関数を使います。
使えるのはCOUNTIF(範囲, 条件)
です。
公式ドキュメント
今回のケースではC2セルに次の関数を入れて使います。
=COUNTIF(C$2:C2,C2)+C2*100-1
範囲の開始を1行目のレコードで固定にするため、C$2
を開始として、終了を自分のセルC2
にしているのがポイントです。
1の位が0から始まって欲しいので最後に-1をしてます。
##Serialの振り方(複数条件ごとに連番)
Serialの採番ルールは、属性とランクが同じモンスターごとに連番になります。
今度は複数の条件を見る必要があるので、COUNTIF(範囲, 条件)
は使えません。
代わりにCOUNTIFS(条件範囲1, 条件1, [条件範囲2, 条件2, ...])
を使います。
公式ドキュメント
今回のケースではC2セルに次の関数を入れて使います。
=COUNTIFS(C$2:C2,C2,D$2:D2,D2)-1
まず条件範囲1, 条件1には、Idと同じようにC列Attributionを設定します。
次に、条件範囲2と条件2を設定します。
D列でも範囲の開始を1行目のレコードで固定にするため、D$2
を開始として、終了を自分のセルD2
にしているのがポイントです。
1の位が0から始まって欲しいので最後に-1をしてます。
これで貼り付けたスクリーンショットのような表が完成します。
##注意点
1.レコードの順番を入れ替えるとズレる
条件のセル位置はズレるのに範囲(条件範囲)のセル位置は変わらないため、数値がズレてしまいます。データを編集後、ゲームに流し込む前には一度正しい関数を貼り付け直す必要があります。
2.リリース後はIdを変えない
当然の話ですが、リリース後にIdを変えるとプレイヤーのデータが不整合を起こす可能性があります。
今回のようにモンスターだとあまり問題がないかもしれませんが、プレイヤーが所有するアイテムや装備品だと持ち物が入れ替わるため非常にまずいです(データの持ち方によります)。
モンスターを仲間にできるシステムがあると装備品と同様の問題が発生します。
動的なId採番はあくまで開発中の仕組みと割り切って活用しましょう。