importrange関数をGASで代用!エラーや重くなるのを回避する方法

デジタルマーケティング

別シートからデータを引っ張ってきて参照したり、特定の範囲だけを別シートから参照したり、何かと便利なIMPORTRANGE関数。

よく使われる関数ですが、
「集計がおかしくなっていて、よく見たらIMPORTRANGE関数でエラーが発生していた・・・」
「どんどんシートが重くなり、読み込みに時間がかかる」
「とにかく重いが、使わないわけにはいかない・・・」

こんな経験はないでしょうか?

IMPORTRANGE関数は非常に便利な一方、シートを読み込むたびに関数も読み込まれるためシートが非常に重くなりやすかったり、読み込む範囲が大きいとエラーになってしまったりと、何かと問題が起こりがちです。

この記事では、IMPORTRANGE関数を使用せず、GASで代用し、別シートを転記する方法をお伝えします。
ご紹介するスクリプトを使えば、

  • IMPORTRANGE関数を使用する場合と比較して、シートを軽くできる
  • 関数の予期しないエラーを回避できる
  • 関数の再読み込みがなく、ラグが発生しない

といったメリットがあります。

非常に使用頻度の高いスクリプトになるので、ぜひご活用ください!

importrange関数をGASで代用する手順

GASコードをエディタにコピペする

IMPORTRANGE関数では、
=IMPORTRANGE(“シートID”,”シート名!範囲”)
のように記述して、別シートを引っ張ってきますが、これをGASで代用します。

IMPORTRANGE関数の代わりとなるGASのコードは以下になります。

function impRange() {
  const impSsId = "xxxxx"; // インポート元のシートID
  const impSheetName = "xxx"; // インポート元のシート名
  const pstSsId = "xxxxx"; // 貼り付け先のシートID
  const pstSheetName = "xxx"; // 貼り付け先のシート名

  impData(impSsId, impSheetName, pstSsId, pstSheetName, 1, 1);
}

function impData(impSsId, impSheetName, pstSsId, pstSheetName, pstStartRow, pstStartCol) {
  let impSs = SpreadsheetApp.openById(impSsId);
  let impSheet = impSs.getSheetByName(impSheetName);
  let impLastRow = impSheet.getLastRow();
  let impLastCol = impSheet.getLastColumn();
  let data = impSheet.getRange(1, 1, impLastRow, impLastCol).getDisplayValues(); // インポート範囲の開始行・列を番号で指定

  let pstSs = SpreadsheetApp.openById(pstSsId);
  let pstSheet = pstSs.getSheetByName(pstSheetName);
  let pstLastRow = pstSheet.getLastRow();
  let pstLastCol = pstSheet.getLastColumn();

  pstSheet.getRange(pstStartRow, pstStartCol, pstLastRow, pstLastCol).clear();
  pstSheet.getRange(pstStartRow, pstStartCol, impLastRow, impLastCol).setValues(data);
  // pstSheet.getRange(pstStartRow, pstStartCol, impLastRow, impLastCol).setFontFamily("xx"); // 貼り付けフォントを指定したい場合は追加
  // pstSheet.getRange(pstStartRow, pstStartCol, impLastRow, impLastCol).setFontSize(x); // 貼り付けフォントサイズを指定したい場合は追加
}

 

「拡張機能」から「Apps Script」を開き、「エディタ」に上記のGASコードを貼り付けます。

シートID・シート名を変更する

「シートID」は、スプレッドシートURLの以下「xxxxx」の部分です。

https://docs.google.com/spreadsheets/d/xxxxx/edit#gid=0

「シート名」は、インポート元・貼り付け先それぞれのシートの名前です。

それぞれを該当コードの部分に入力します。

関数を実行する

では、実際にこのような広告の元データがあると想定し、このデータを別シートに転記してみます。

 

関数「impRange」を実行します。
エディタ上の「実行」をクリックしてください。

※初回実行時は承認が必要ですので、承認を完了させてください。

うまく転記できました!

トリガーを数分おきに指定すれば、ほぼリアルタイムでデータを転記し続けられます。

貼り付け先のフォントやフォントサイズがデフォルトになるので、シートの見栄えを気にする方は24行目・25行目でフォントとサイズを指定してみてください!
(僕個人は、いつもOpen Sansを使っているので、Open Sansを指定しています)

注意点:転記先シートが空白だとエラーが発生する

ご紹介したコードを使用する際、転記先のシートが空白だとエラーになってしまいます。

転記先シートが空白の場合は、何か文字列を打った状態にして「impRange」を実行してみてください。

まとめ

IMPORTRANGE関数を今回ご紹介したGASコードで代用することができました。

これにより

  • IMPORTRANGE関数を使用する場合と比較して、シートを軽くできる
  • 関数の予期しないエラーを回避できる
  • 関数の再読み込みがなく、ラグが発生しない

といったメリットがあります。

ぜひ使ってみてください!

タイトルとURLをコピーしました