LoginSignup
2
0

More than 3 years have passed since last update.

ひとくちExcel スピルで指定の列全体を動的に取得する

Last updated at Posted at 2021-01-07

CSVデータ等の表データから何かしらの計算をする際に
計算用の列に「列全体をとりあえず持ってきたい」ケースがあると思います。

データが入っているシート[Sheet1]の指定の列A全体を抜き出す関数を作ってみました。

例えば以下のような表がシート[Sheet1]にある場合
2.png

別シート[Sheet2]のセル[A1]に

=Sheet1!A:A

と入力して全表示しても良いのですが、これではデータ量が多くなった場合や計算を絡めた場合にこの参照を用いると処理が重くなります。

なのでCOUNTA関数で「ここからここまで」と正確な範囲を指定することで処理の負荷を抑えられます。

=INDIRECT("'"&$A$2&"'!"&B2&"1:"&B2&COUNTA(INDIRECT("'"&$A$2&"'!"&B2&":"&B2)))

1.png

参照先はダブルクリックで参照を表示させドラッグで変更してお使いください。
わざわざ引数をINDIRECT関数でゴチャゴチャさせた理由は、参照先の変化に対応させる為です。

上記の関数では、セル[A2][B2]をパラメータとして扱うことで、参照先の変化に対応させます。
これなら急に列の参照位置が変わってもアルファベットを変えれば楽に変更が可能です。

またケースによっては、「1行目の見出し行は含みたくない」時もあると思います。
その場合は以下のようにデータの開始位置を指定できるようにすればメンテナンス性も向上するでしょう。

=INDIRECT("'"&$A$2&"'!"&B2&C2&":"&B2&COUNTA(INDIRECT("'"&$A$2&"'!"&B2&":"&B2)))

5.png

応用例:列のアルファベットを入力しておき、オートフィルで参照させる

参照先をパラメーターで動的に指定できるようになったので、参照が増えた時のことを考えます。
以下のような表があるとします。
4.png

この表を先ほどの関数で1つ1つ定義していっては時間がかかるので、
上記の関数を少し変えてオートフィルで参照を増減できるようにします。

=INDIRECT("'"&$A$2&"'!"&B1&"1:"&B1&COUNTA(INDIRECT("'"&$A$2&"'!"&B1&":"&B1)))

これで、参照列さえ押さえていれば逐一データシートを身に行って確認しながら参照の設定を行わなくてもよくなりました。

3.png

列でアルファベットの連続データを作成したい場合には、先頭のアルファベットが入力されているセルに
以下の関数で次のように関数を入れオートフィルすれば良いでしょう。(Zまでしか入力できませんが)

=CHAR(CODE(B1)+1)

まとめ

Excelのライセンスによってはスピル機能が使えない場合があります。
他人が使うテンプレートを作る場合は使う人のExcelを確認してから渡しましょう。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0