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