どうもY-nek0(@Ynek0)です。
今回はスプレッドシートにあるデータを別のスプレッドシートに移動するGASをご紹介できればよいかと思います。
基本データを取得するには
getValues();
そしてデータを貼り付けるには
setValues([getValuesで取得した値]);
を利用します。
ではこれらを使って、スプレッドシートから別ののスプレッドシートにデータを移動させるGASを作ってみましょう。
えっ?
別にそんな方法をとらなくてもImportrangeで別のスプレッドシートにデータを移動できるじゃないかって?
確かにImportrangeでも別スプレッドシートへ値を残す事は可能ですが、用途が違います。
Importrangeは常に元のスプレッドシートとの同期が取られているモノであり、原本を触られたくない場合に使用されることが多いと思います。
今回お教えするものは原本とコピー先が独立しており、コピー先がどれだけ編集されても原本には何の影響も及ぼさない手段です。
要するに元のスプレッドシートをコピーして別のスプレッドシートにペーストするのをGAS上でやりましょうって事です。
では始めて行きましょう。
元のスプレッドシートから値を取得する
もともとデータが存在している原本のスプレッドシートから値を取得する場合は前述したとおり
.getValues()
を利用します。
単一セルの値を取得したい場合は
.getRange("B1").getValues();
という表記になり、これはB2セルを指定しています。
複数行にわたって値を取得したい場合は
.getRange(2,1,5,7).getValues();
ここから先は行と列がどこかを理解している必要があります。
すこしど忘れしている様でしたらこちらの記事を参照して頂けると幸いです。
この数字を上から順に説明すると
2 =始発とする行番号
1 =始発とする列番号……つまりA列 = 1 と指定する事ができる。
----記入は省略出来る範囲----
5 =範囲最終となる列番号
7 =範囲最終となる行番号
つまりgetRange(2,1,5,7)はA2:G5の範囲を指定している事になります。
元データから範囲でデータを取得する
ではどのようにデータの取得を行えばよいかですが、以下の様にコードを組み立てれば問題無いかと思います。
//元データ取得
var SS_CopyFrom =SpreadsheetApp.openById("元スプレッドシートのID");
var Sheet_CopyFrom = SS_CopyFrom.getSheetByName('シート1');
//元データの最終行、最終列を取得
var LastRow = Sheet_CopyFrom.getLastRow(); //最終行を取得
var LastColumn = Sheet_CopyFrom.getLastColumn(); //最終列を取得
//元データの取得した最終列、最終行までに入力された値を取得する。
var CopyValue = Sheet_CopyFrom.getRange(2,1,LastRow,LastColumn).getValues();
これで元のスプレッドシートからデータの取得は完了です。
次に取得したデータを貼り付けるGASを記述します。
コピー先スプレッドシートへデータをペーストする
基本ペーストする場合はsetValues()を利用します。
単一で指定する場合。
.setValues([getValuesで取得した値]);
複数行を指定する場合はやはりgetRangeを使用します。
Sheet_CopyTo.getRange(1,1,10,2).setValues(copyValue);
これでA1:B10に値をペーストする事が出来ます。
それではどのようにペースト処理をすればよいかは下記に記載します。
//貼り付け先のスプレッドシートのIDを指定してシート名を指定する
var SS_CopyTo = SpreadsheetApp.openById("コピー先スプレッドシートのID");
var Sheet_CopyTo = ss_copyTo.getSheetByName('シート1');
//コピーした値を貼り付ける。
Sheet_CopyTo.getRange(1,1,LastRow,LastColumn).setValues(CopyValue);
この様にして別のスプレッドシートにデータをコピーアンドペーストする事が可能です。
まとめるとこの様なコードになります。
//元データ取得
var SS_CopyFrom =SpreadsheetApp.openById("元スプレッドシートのID");
var Sheet_CopyFrom = SS_CopyFrom.getSheetByName('シート1');
//元データの最終行、最終列を取得
var LastRow = Sheet_CopyFrom.getLastRow();
//最終行を取得
var LastColumn = Sheet_CopyFrom.getLastColumn();
//元データの取得した最終列、最終行までに入力された値を取得する。
var CopyValue = Sheet_CopyFrom.getRange(2,1,LastRow,LastColumn).getValues();
//貼り付け先のスプレッドシートのIDを指定してシート名を指定する
var SS_CopyTo = SpreadsheetApp.openById("コピー先スプレッドシートのID");
var Sheet_CopyTo = SS_CopyTo.getSheetByName('シート1');
//コピーした値を貼り付ける。
Sheet_CopyTo.getRange(1,1,LastRow,LastColumn).setValues(CopyValue);
上記の様なコードになります。
是非参考にして今後の効率化に役立てて頂ければ幸いです。
ではまた次回、ご贔屓に。