スプレッドシート

スプレッドシートで日を飛び飛びに

昨日「ARRAYFORMULA関数を使って、7日毎の日付を並べたい」といったご相談がありました。

ARRAYFORMULA関数って?

聞きなれない関数名ですが、ARRAY(配列)FORMULA(計算)する関数で、記述の仕方によってはセルごとに関数をコピペしていた作業が0になります。

0calではありませんよ?

簡単な例

元々のC2セルの計算式が「=A2+B2」の式があったとき

C3セル以降も「=A3+B3」と式を展開する必要があります。

ARRAYFORMULA関数を使うと

C2セルに「ARRAYFORMULA(A2:A9+B2:B9)」と入力するだけで配列計算(範囲計算)をやってくれます。

便利&楽でしょう?

ARRAYFORMULAの注意点

配列を一気に処理してくれるARRAYFORMULAはとても便利なのですが、注意すべき点があります。それは「ARRAYFORMULA関数で展開したデータは自身を参照してはいけない」という点です。

基準セルをA1にしてA2セルの関数を「=ARRAYFORMULA(A1:A9+7)」と書けば展開されそうですが、A2セル以降はARRAYFORMULA関数自身によって書換&参照されるため循環参照エラーが発生します。

本題の飛び飛び日付

  • 参照が重複しないこと
  • 飛び飛びを別の表現をすること

これがクリアできればいいのでこんな関数に仕立てました。

「=ARRAYFORMULA(A1+ (ROW(A2:A9)-1) * 7)」

  • A1…日付基準セル
  • ROW(A2:A9)…行番号を返す関数ROW()を使用、上記式では2~9を返す。ここでARRAYFORMULAが生きてきます。
  • -1…ROW(A2:A9)では2~9を返すため1~8への補正用
  • *7…7日飛び

この結果がこちらです。

A1セルに基準日、A2セルに関数を入力しただけで7日おきの日付が展開されました。

事例に使ったスプレッドシートは下記リンク先にあります。コピーは自由です。ご自身の責任の範囲内でご利用ください。

https://docs.google.com/spreadsheets/d/1ZiL-L72-oocpYQgzGr5JzNQjm-YOOSefquNbZcZQQrY/edit#gid=669179293

ABOUT ME
Nozomu.Kon
トータルソフトウェアコーディネーターがあなたのお困りを即時に解決!