別シートからデータを引っ張ってきて参照したり、特定の範囲だけを別シートから参照したり、何かと便利な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関数を使用する場合と比較して、シートを軽くできる
- 関数の予期しないエラーを回避できる
- 関数の再読み込みがなく、ラグが発生しない
といったメリットがあります。
ぜひ使ってみてください!