8/01/2022

Excel。行が等間隔のデータを列方向に簡単にコピーするにはどうしたいいの【Equally spaced】

Excel。行が等間隔のデータを列方向に簡単にコピーするにはどうしたいいの

<INDEX+COLUMN関数>

帳票の都合で、どうしても行方向ではなくて列方向に等間隔のデータをコピーするには、どのようにしたら簡単に、しかも手早く処理をすることができるのでしょうか?


例えば、次のような表の場合です。


四半期のデータが、B5・B9・B13と3行空けた等間隔にある表があります。

この表内の四半期のデータを列方向に抽出というかコピーをしたいわけです。


コピー&ペーストするだけですが、データ量が増えると面倒ですし、貼り付けで、行列をいれかえた貼り付けるやり方だと、余計なデータも含めてしまい、データの削除が面倒になってしまいます。


Excel VBAでわざわざプログラムをつくるのも、ちょっと面倒です。


このような場合、INDEX関数をつかった数式で、簡単に処理することができるので、その方法をご紹介します。


D2にINDEX関数の数式をつくっていきます。


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

この数式だけで、行の等間隔のデータを列方向に抽出することができます。


では、INDEX関数の引数を確認しておきましょう。


最初の引数は、配列。

データがある範囲なので、B2:B13が対象になります。

オートフィルで列方向に数式をコピーしますので、絶対参照を設定して、$B$2:$B$13。


2つ目の引数は、行番号です。

ポイントは、この行番号です。

どのようにしたら、等間隔に指定することができるのかを考える必要があります。


C列に連番を設定してみると、4の倍数であることがわかります。

オートフィルで列方向に移動した時に、最初が1で次が2というような数値を算出するものがあれば、この4倍というパターンがつかえそうです。

そこで登場するのが、COLUMN関数です。


COLUMN関数は、アクティブになっているセルの列番号を算出してくれる関数です。

数式を設定しているセルはD列なので、「4」と算出してしまうので、COLUMN(A1)とセル番地を設定することで、「1」と算出することができます。


オートフィルで列方向に数式をコピーすれば、COLUMN(B1)となり、「2」と算出してくれますので、4の倍数というパターンでつかうことができるわけです。


引数の列番号は、省略するので、あとは、オートフィルで数式をコピーすれば、完成というわけです。


VLOOKUP関数などでうまくできないケースをはじめ、INDEX関数が重宝するケースもありますので、色々試してみると数式の可読性も向上するかもしれませんね。