スプレッドシート内でデータを参照することで、大規模なデータセットを扱う際のパフォーマンスを向上させることができます。以下は、パフォーマンスを向上させるためのおすすめの方法です。
- 計算速度
- 安定性
- CPU 使用率
可能な場合は同じシート上のデータを参照する
作業中のスプレッドシート上のデータを参照します。こうすることで、次のような IMPORT 関数を利用するよりも効率がよくなります。
- IMPORTRANGE
- IMPORTDATA
- IMPORTXML
- IMPORTHTML
IMPORTRANGE() を使用して別のスプレッドシートからデータを取り込む場合は、以下に当てはまるとしても、この IMPORT 関数がスプレッドシート間でデータを参照する際にインターネットが使用されます。
- あなたがそのスプレッドシートのオーナーである
- 両方のスプレッドシートを同じブラウザで開いている
- 両方のスプレッドシートが同じドライブ内に保存されている
この場合、データをリクエストして取得するという過程(ラウンド トリップ)が必要になります。また、ネットワーク遅延が発生したり、接続が不安定になることで、読み込み速度が遅くなることもあります。
別のスプレッドシートから自分のスプレッドシートにデータを手動で移動し、そのスプレッドシート(シート内の他のタブも含む)からデータを参照する場合、データを取得する処理はインターネットを経由することなくローカルで行われます。この方法は時間の節約になりますが、利用できるのは、変更される可能性がない比較的静的で確定的なデータ(在庫履歴や過去のデータなど)を扱う場合に限られます。
データを手動で移動するには、以下の手順で既存のデータを別のスプレッドシートから自分のスプレッドシートにコピーします。
- 下部のシート名の横にある下矢印
[別のワークブックにコピー]
[既存のスプレッドシート] をクリックします。
- このシートのコピー先のスプレッドシートを選択します。
ヒント: Google ドライブのビューでコピー先のスプレッドシートが見つからない場合は、目的のスプレッドシートのウェブアドレスを画面下部のバーに貼り付けます。
非限定範囲の参照の代わりに、限定範囲を使用する
非限定範囲の参照とは、特定の行や列が開始値と終了値として指定されていない範囲を参照することを意味します。例: A:B は、列 A と B のすべてのセルを含む範囲を意味します。
限定範囲の参照では、特定の行や列が開始値と終了値として指定されている範囲が参照されます。
例: A1:B6, A1:C100。
非限定範囲: A:B
限定範囲: A1:B6
例: 列 A の合計を計算しようとしたところ、1 万行のうち最初の 10 行にしか値が含まれていない。
- SUM 関数で非限定範囲の参照(SUM(A:A))を使用すると、非限定範囲の参照に空白のセルが含まれていても、パソコンには 1 万行すべてが読み込まれます。Google スプレッドシートは、空白のセルの有無をチェックするために、読み込まれたすべての行を一つずつ確認します。
- 限定範囲の参照(SUM(A1:A10))を使用すると、パソコンには A1~A10 行のみが読み込まれるため、Google スプレッドシートの計算速度が上がります。
揮発性関数を効率的に参照する
TODAY() 、RAND() 、RANDBETWEEN() 、NOW() は、最新の状態に保つために頻繁に変更または更新される揮発性関数です。本来、これらの関数は静的ではありません。たとえば、TODAY() は毎日更新されます。
例: 列 B の各行が列 A の各行からデータを読み取る場合。列 B の結果の計算時に、列 A のすべてのセルが更新されます。
NOW() や TODAY() など、同じ結果を返す揮発性関数を参照する場合は、絶対参照を使用して、一度だけ参照するようにします。この例の場合、列 B の計算結果はセル A2 にのみ依存します。不要な依存関係を取り除くことで、スプレッドシートの動作が速くなります。
可能であれば長い参照チェーンを避ける
参照チェーンを使うとシートの動作が遅くなります。たとえば、次の場合、A2 は A1 のデータを読み取って、A3 は A2 のデータを読み取って、という具合に続きます。データがつながっているため、Google スプレッドシートは、A1~A9 までのすべての計算を完了するまで A10 の値を返すことができません。
セルを埋める際のチェーン計算を回避するには、絶対参照を使用します。この例の場合、A2 は A1 のデータを読み取って、A3 は A1 のデータを読み取って、という具合に続きます。A1 の値は計算済みで利用可能であるため、A2 から A10 は A1 の値を直接取得して使用します。結果はどちらも同じですが、こちらの方が速く計算できます。