いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

(Gスプレッドシート)グループごとに連番をふる

 Googleスプレッドシートで、値によりグループを区別してそれぞれに別々の連番をふる方法についてです。

  • COUNTIF関数と絶対参照を利用して、グループごとに個別の連番をふることができます。
  • COUNTIFS関数を用いると1つのセルに入力するだけですべての連番をふることができます。



手順

各セルに入力して連番をふる方法(COUNTIF関数利用)

f:id:accs2014:20200201173430p:plain:right:w450

 B列に3種類のグループ名が混在して並んでいます。
 そこで、それぞれのグループごとに上から1,2……と連番をふるものとします。

 画像は、まずC3セルに次のように入力したところです。

=COUNTIF(B$3:B3,B3)

 B3セルにあるB3セルの値の数を数えているわけですから、当然ここでは1という結果が返っています。
 しかし最初のB$3という絶対参照がポイントになっており……

f:id:accs2014:20200201173435p:plain:right:w450

 あとは式を下方にフィルコピーすれば完成です。

f:id:accs2014:20200201173440p:plain:right:w450

 一番下のC11セルの式を見てみると次のようになっています。

=COUNTIF(B$3:B11,B11)

 B$3という絶対参照の効果で、下方のセルほど広い範囲を参照することとなっているのがわかります(ここではB3:B11の9セル)。
 これにより、それぞれのセルで「横にあるか上方にあるセルの中で横にあるグループ名と同じものの数を数える」ことができ、結果的にそれぞれのグループの連番が得られるというわけです。

1つのセルだけに入力して連番をふる方法(COUNTIFS関数利用)

f:id:accs2014:20200201173445p:plain:right:w550

 画像は結果です。
 C3セルに次のような式を入力しています。

=ARRAYFORMULA(COUNTIFS(B3:B11,B3:B11,ROW(B3:B11),"<="&ROW(B3:B11)))

 上記の例のような考え方を1つの式にまとめた形になっています。
 一見つかみどころがありませんが、次のような式をいっぺんに実行していると考えればわかりやすいかと思います。

=COUNTIFS(B3:B11,B3,ROW(B3:B11),"<="&ROW(B3))
=COUNTIFS(B3:B11,B4,ROW(B3:B11),"<="&ROW(B4))
 ・
 ・
 ・
=COUNTIFS(B3:B11,B11,ROW(B3:B11),"<="&ROW(B11))