10/11/2021

Excel。等間隔のデータを手早くコピーしてリスト化するにはどうしたらいいの?【Equally spaced】

Excel。等間隔のデータを手早くコピーしてリスト化するにはどうしたらいいの?

<INDEX+ROW関数>

セル参照にしても、コピーペーストをするとしても、等間隔のデータを手早くコピーしてリスト化する作業は結構面倒です。例えば次のような表の場合です。


3日ごとの集計されている合計値を、別セルにリスト化したいわけですね。


サンプルのように件数が少ない場合、「努力と根性」でどうにかできますが、面倒です。


Excel VBAでプログラムを作ってもいいですが、簡単な関数をつかった数式で対応することができます。


その数式は、

=INDEX($B$2:$B$13,ROW(A1)*4)

という数式が、E1に設定されています。


この数式を、オートフィルで数式をコピーするだけで、簡単で、手早くリスト化することができます。


今回のようなケースの場合は、行番号・列番号が交差されるセル番地を算出できる「INDEX関数」か、指定した参照の行番号・列番号の範囲の値を算出する「OFFSET関数」のどちらかで、対応できないかを考えてみるといいですね。


このデータの特徴としては、3日間の合計値は、行数が、4つごと。

つまり、4の倍数ごとに登場しているわけです。


そこで、行番号・列番号が交差されたセル番地を参照できる「INDEX関数」をつかうことで、算出できるのではと、想像します。


では、実際にINDEX関数をつかって、数式をつくってみます。


INDEX関数は、2つの種類から選択できる関数です。


INDEX(配列,行番号,[列番号])で算出できますので、こちらを採用します。


引数を確認していきます。

配列ですが、これは、値がある範囲なので、$B$2:$B$13。


完成した数式をオートフィルでコピーしますので、絶対参照を設定しておきます。


行番号。

ROW(A1)*4

ここがポイントです。


合計値が登場しているセルは、B5・B9・B13ですが、配列で、B2:B13としています。

行数は2行目が1で13行目が12なわけですから、実際に求めたい数値は、「4・8・12」ですね。

B2:B13の4行目・8行目・12行目を算出したいわけです。


B5=4行目=1×4

B9=8行目=2×4

B13=12行目=3×4


1~3と増加する数値は、行番号を算出することができるROW関数をつかうと、すべての問題をクリアすることができます。


ROW(A1)は1。オートフィルで数式をコピーするので、ROW(A2)なら2と算出してくれます。


引数の列番号は、列を移動させる必要がないので、省略が可能です。


INDEX関数は、アイディアによって使い勝手がいい関数なので、機会がありましたら、アレコレつかってみると、現場で使用している数式を、コンパクトにすることができるかもしれませんね。