GASでスプレッドシートの指定範囲を値のみコピーする効率的な方法

Google Apps Script(GAS)を使ってスプレッドシート操作を自動化する際に、特定のセル範囲の値を別のシートにコピーする方法って、かなり便利ばい。そのために使うメソッドがcopyValuesToRangeなんだけど、ちょっと難しそうに見えるかもしれんね。でも心配せんで!ここでしっかり解説するけん、すぐに使えるようになるけ。

スポンサーリンク

copyValuesToRangeメソッドってどんなもの?

まず、このメソッドがどんなものか簡単に説明するばい。copyValuesToRange(gridId, column, columnEnd, row, rowEnd)って構文なんやけど、要するに「ある範囲の値を、別のシートの指定した範囲にコピーする」ためのものじゃ。これは、値だけをコピーして、書式とか数式は無視するところが特徴的やけ。

使い方の基本

sourceRange.copyValuesToRange(gridId, column, columnEnd, row, rowEnd);

このメソッドには5つのパラメータがあるけど、それぞれ簡単に説明するけ。

  1. gridId(シートID)
    コピー先シートのIDを指定するんよ。これはSpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート名").getSheetId()で取得できるけんね。
  2. column(開始列)
    コピー先の開始列番号を指定するけ。たとえば「C列」は3番目なので、3って指定するんや。
  3. columnEnd(終了列)
    コピー先の終了列番号も指定するけ。例えば「F列まで」コピーしたい場合、6って指定すればOKじゃ。
  4. row(開始行)
    コピー先の開始行番号を指定するけ。1から始めるけど、例えば「5行目」からスタートしたいなら、5を指定するんや。
  5. rowEnd(終了行)
    コピー先の終了行番号を指定するけ。たとえば「10行目」で終わるなら、10を指定するんじゃ。

実際のコードで見る基本の使い方

function basicCopyExample() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = ss.getSheetByName('SalesData');
  const targetGridId = ss.getSheetByName('Archive').getSheetId();
  
  const sourceRange = sourceSheet.getRange('B2:E10');
  sourceRange.copyValuesToRange(
    targetGridId,
    3,  // C列から
    6,  // F列まで
    5,  // 5行目から
    13  // 13行目まで
  );
}

このコードは、「SalesData」シートから「Archive」シートにデータをコピーするものやけ。範囲を指定する際に、行数や列数が一致していないとエラーが出るけ、注意せんといけんよ。

実践的な動的範囲コピー

次は、データの量が変動する場合のコピー方法について説明するけ。

function dynamicRangeCopy() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = ss.getSheetByName('Inventory');
  const lastRow = sourceSheet.getLastRow();
  
  const sourceRange = sourceSheet.getRange(2, 1, lastRow-1, 4);
  const targetSheet = ss.getSheetByName('Backup');
  
  sourceRange.copyValuesToRange(
    targetSheet.getSheetId(),
    1, 
    4, 
    2, 
    lastRow
  );
}

このコードは、「Inventory」シートのデータを「Backup」シートにコピーするものやけ。getLastRow()を使って最終行を動的に取得し、データの変動に対応しとるんや。

よくあるエラーとその解決法

実装しているときに、よく出るエラーもあるけ。ここではそれに対する対策を紹介するけ。

パラメータ不一致エラー

Exception: Parameters don't match the method signatureってエラーが出た場合、パラメータの型が違うことがあるけ。数値型を使うべきところで、文字列を使ってしまうことが多いけ、確認してみて。

範囲サイズ不一致エラー

コピー元とコピー先の範囲が一致しないと、Exception: The coordinates or dimensions of the range are invalidが出るけ。範囲をしっかり確認して、合わせるようにしようね。

最後に

copyValuesToRangeメソッドを使うと、スプレッドシートのデータを簡単にコピーできるけ、特にデータ転送作業を自動化したいときにはとても役立つ機能じゃ。ただし、範囲やパラメータに注意が必要なので、実装前にしっかり確認してから使うようにしてほしいけね。

これで、スプレッドシートの操作をよりスムーズにできるようになるけ!みんなもぜひ使ってみてね。

コメント

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