いきなり答える備忘録

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

(Gスプレッドシート)空白セルを飛ばして連番をふる

 Googleスプレッドシートで、空白セルでないセル(値があるセル)の隣のセルに連番をふっていく方法についてです。

  • COUNTIF関数を使って、空白セルを除いて連番をふることができます。空文字列(「=""」や「'」)をカウントするかしないか選択できます。
  • COUNTIFS関数を使うと1つのセルに入力するだけですべての連番をふることができます。空文字列(「=""」や「'」)をカウントするかしないか選択できます。

手順

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

空文字列をカウントしない場合

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

 C2:C13に値が入力されていますが、一部飛び飛びになっているのがわかります。
 また、C4セルには空文字列(="")が入力されています。

 画像は、まずB2セルに次の式を入力したところです。

=IF(C2="","",COUNTIF(C$2:C2,"<>'"))

 「<>」の次に「'」があることに注意してください。これにより純粋な空白セル(値がない)と空文字列がカウントから除かれます。
 さて、ここではC2セルにある値の数を数えているわけですから、当然1という結果が返っています。
 しかし最初のC$2という絶対参照がポイントになっています。
 

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

 この式を下方にフィルコピーすれば完成です。

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

=IF(C13="","",COUNTIF(C$2:C13,"<>'"))

 C$2という絶対参照の効果で、下方のセルほど広い範囲を参照することとなっているのがわかります(ここではC2:B13の12セル)。
 これにより、それぞれのセルで「隣のセルが空白なら空白を返し、そうでなければ隣か上方にある値の数を数える」ことができ、結果的に必要な連番が得られています。

空文字列をカウントする場合

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

 C2セルに次の式を入力し、下方にフィルコピーして完成したところです。

=IF(ISBLANK(C2),"",COUNTIF(C$2:C2,"<>"))

 IF関数の第1引数にISBLANK関数を使っていることと「<>」の次に「'」がないのが上記例との違いです。
 これにより純粋な空白セル(値がない)だけがカウントから除かれ、空文字列はカウントされます。

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

空文字列をカウントしない場合

 B2セルに次の式を入力して完成した様子です。

f:id:accs2014:20200202142304p:plain:w700

=ARRAYFORMULA(IF(C2:C13="","",COUNTIFS(C2:C13,"<>'",ROW(C2:C13),"<="&ROW(C2:C13))))

 「<>」の次に「'」があるので純粋な空白セル(値がない)と空文字列がカウントから除かれます。
 ARRAYFORMULAを使ったちょっと複雑な式ですが、次の式をいっぺんに実行していると考えればわかりやすいかと思います。

=ARRAYFORMULA(IF(C2="","",COUNTIFS(C2:C13,"<>'",ROW(C2:C13),"<="&ROW(C2))))
=ARRAYFORMULA(IF(C3="","",COUNTIFS(C2:C13,"<>'",ROW(C2:C13),"<="&ROW(C3))))
 ・
 ・
 ・
=ARRAYFORMULA(IF(C13="","",COUNTIFS(C2:C13,"<>'",ROW(C2:C13),"<="&ROW(C13))))

空文字列をカウントする場合

 B2セルに次の式を入力して完成した様子です。

f:id:accs2014:20200202142308p:plain:w750

=ARRAYFORMULA(IF(ISBLANK(C2:C13),"",COUNTIFS(C2:C13,"<>",ROW(C2:C13),"<="&ROW(C2:C13))))

 1つ上の例との違いは違いはIF関数の第1引数にISBLANK関数を使っていることと、「<>」の次に「'」がないことです。
  これにより純粋な空白セル(値がない)だけがカウントから除かれ、空文字列はカウントされます。

備考

 COUNTA関数を用いる方法もありますが、COUNTA関数は常に空文字列をカウントするため注意が必要です。