なんでもエクセル(Nandemo Excel)

何でもエクセルでやってしまう そこのあなた。ようこそ

数式/関数:空白行で仕切って連番を入れる

やってみて「あれ?」と思ったので記事にすることにした。画像のように空白行で区切られたデータの横に連番を振りたい時。

先頭が必ず空白行で、範囲に予め数式を入れておけばいいのなら

=IF(A1="","",SUM(INDEX(B:B,ROW()-1),1))
数式を下方向にコピー

これでいい。ただオートフィルコピーではなく、スピルで表現してみようと思ったのでやってみたら……「#VALUE!」エラーが出てしまった。

失敗例

=SCAN(     "",     TAKE(A:A,XMATCH("*?",A:A,2,-1)),     LAMBDA(x,y,IF(y="","",SUM(x,1))) )

原因を調べてみると「SUM(x,1)」で初期値の「""」が数値化されていないことが分かった。なんで?

「=SUM(A1,1)」とした時は、「A1」に文字列が入っていてもちゃんと「1」と答えを返すのに。疑問に思いつつも、「SUM(x,1)」を「SUM(0&x,1)」としたら上手くいった。

因みに Googleスプレッドシートの場合はこれでもダメで、ちゃんと数値化の演算を入れる必要がある。

Googleスプレッドシートの場合

=SCAN(     "",     A1:A,     LAMBDA(x,y,IF(y="","",SUM(--(0&x),1))) )

横着するなという話ではあるんだけど、通常と違う仕様になっていると若干とまどうものがある。