連番の配列って好きな数分作れるとうれしくないですか?
具体的には、20と決めたら{1,2,3,4,5,…, 20}を生成するというようなものです。。
用途としては、グラフの縦軸を必要な分用意するとか。多次元の近似曲線の係数計算とか。
実はSEQUENCE関数というものがEXCEL2019から追加されているのですが、過去のバージョンでは対応していません。。。
ROW関数, COLUMN関数の引数に範囲(range)を渡すと、その行番号もしくは列番号を配列で返す
という点に着目すると実現できます。
セルをクリックして数式・値を確認!!
順番に見ていきますと、
Step1
=COLUMN(A:C)
列A~Cの範囲をCOLUMN関数に渡しています。よってその列の番号1~3が列方向(横方向)の配列を返します。
Step2
=ROW(1:3)
行1~3の範囲をROW関数に渡しています。よってその行の番号1~3が行方向(縦方向)の配列を返します。
Step3
=COLUMN(B:F)
列B~Fの範囲をCOLUMN関数に渡しています。よってその列の番号2~6が列方向(横方向)の配列を返します。
Step4
ここでステップアップです。指定したセルからスタートの数とエンド数を決めてそれに従って列方向の配列を返すことを試みます。
=ROW(INDIRECT(D15&":"&D16))
ここで用いたのはINDIRECT関数です。INDIRECTは文字列から参照先を指定することが可能になります。
行2~4の範囲をROW関数に渡しています。よってその行の番号2~4が行方向(縦方向)の配列を返します。
Step5
さらにステップアップです。指定したセルからスタートの数とエンド数を決めてそれに従って行方向の配列を返すことを試みます。
悩ましいのは、A1形式ではStep3のようにアルファベットで指定しなければなりません。そこでR1C1形式です。
INDIRECT関数のFALSEを指定することでR1C1形式で指定することができ、数字をそのまま利用できます。
=COLUMN(INDIRECT("C"&D17&":C"&D18,FALSE))
だいぶ長くなってきました。。TRANSPOSEでも良いですね。
=TRANSPOSE(ROW(INDIRECT(D17&":"&D18)))
少ない数式で計算できるイメージが湧いてきませんか??
- ROW関数
- COLUMN関数
- INDIRECT関数
- TRANSPOSE関数