指定範囲をコピーするのに、importrangeを使ってきたけど、同じスプレッドシートのファイル内なのに、アドレスを指定しているって不思議な感じがするし、動作が遅くなってる原因になる気がする。
他の関数で、指定範囲を参照する方法はないのかな?
Arrayformula関数で、指定範囲を参照(コピー)できるよ!
目次
ARRAYFORMULA関数で、指定範囲を参照(コピー)する方法
別のシートの場合(シート名の指定方法)
参照(コピー)したい範囲の左上に以下の式を入力すると、
=ARRAYFORMULA(‘シート2’!C1:D600)
‘シート2’という名前のシートのC1〜D600の範囲をコピーしてきてくれます。
=ARRAYFORMULA(‘シート2’!C1:D600)
‘シート2’という名前のシートのC1〜D600の範囲をコピーしてきてくれます。
うまく動作しないときのチェックポイント
・シート名を囲むのは、ダブルクオーテーション「”」ではなく、シングルクオーテーション「’」です。
・importrange関数も同じですが、コピー先で貼り付けられる範囲に値が入っていると、エラーが表示されます。空白セルにしておきましょう。
同一シート内の指定範囲を参照(コピー)する方法
参照(コピー)したい範囲の左上に以下の式を入力すると、
=ARRAYFORMULA(C1:D600)
C1〜D600の範囲をコピーしてきてくれます。
=ARRAYFORMULA(C1:D600)
C1〜D600の範囲をコピーしてきてくれます。
ARRAYFORMULA関数の仕組み
ARRAYFORMULA関数が行っているのは、指定範囲内で式を繰り返すことです。
=ARRAYFORMULA(‘シート2’!C1:D600)の場合は、
この式を”シート1”のA1の1箇所に貼り付けるだけで、
シート1のA1に、シート2のC1をコピー
シート1のB1に、シート2のD1をコピー
シート1のA2に、シート2のC2をコピー
シート1のB2に、シート2のD2をコピー
シート1のA3に、シート2のC3をコピー
シート1のB3に、シート2のD3をコピー
この作業を600行目まで繰り返してくれます。
もしひとつ一つ=で設定していたら大変な数の式が入ってしまいますね。
参照(コピー)におけるARRAYFORMULA関数とIMPORTRANGE関数の使い分け
参照(コピー)したい範囲が同一のスプレッドシート内でのコピー(参照)あれば、より高速に動作するARRAYFORMULA関数を使うことをオススメします。
参照したい範囲が別のスプレッドシートの場合は、IMPORTRANGE関数を使いましょう。
※IMPORTRANGE関数も同様の結果を返してくれますが、スプレッドシートを特定するために一度作業しているスプレッドシートの外にアクセスしているような時間が必要になっているように思います。