earthpg:GAS専門のプログラミングスクール

GASで簡単に実装!別のスプレッドシートからデータを取得・転記する方法

うーん、GASを使って別のスプレッドシートからデータを取得したりコピーしたりする方法が知りたいなぁ…。どうやればいいんだろう?
猫男
猫男
catman
catman
それなら、catmanが教えてあげよう!GASを使ってスプレッドシート間でデータを操作するのは思ったより簡単なことなんだ。

GASで別のスプレッドシートからデータを取得する基本

まずは、GASで別のスプレッドシートを開くところから始めよう。

スプレッドシートを開く

GASでは、スプレッドシートのIDを使って特定のスプレッドシートを開くことができる。以下のコードを参照してみてくれ。


var spreadsheetId = 'YOUR_SPREADSHEET_ID';
var sheet = SpreadsheetApp.openById(spreadsheetId).getActiveSheet();

SpreadsheetApp.openById(ID): 指定したスプレッドシートIDでスプレッドシートを開く。
getActiveSheet(): 開いたスプレッドシートのアクティブなシートを取得する。

これで別のスプレッドシートを開けるんだね。でも、データをどうやって取得すればいいんだろう…?
猫男
猫男

スプレッドシートから値を取得

次に、シートのデータを取得する方法だ。


var dataRange = sheet.getDataRange();
var values = dataRange.getValues();

getDataRange(): シートの全データ範囲を取得。
getValues(): データ範囲内の全データを2次元配列として取得する。

catman
catman
この方法を使うと、スプレッドシート内のデータを簡単に取得できる。次は、データを別のスプレッドシートに転記してみようか。

GASで別のスプレッドシートに転記する方法

データを転記する時も、GASを駆使すれば簡単さ。

データを転記

コピーしたいデータを別のシートに書き込むコードを紹介する。


var destinationSpreadsheetId = 'DESTINATION_SPREADSHEET_ID';
var destinationSheet = SpreadsheetApp.openById(destinationSpreadsheetId).getActiveSheet();
destinationSheet.getRange(1, 1, values.length, values[0].length).setValues(values);

getRange(row, column, numRows, numCols): 書き込む範囲を指定。
setValues(values): 取得したデータを各セルに書き込む。

これならデータを簡単にコピーして別のスプレッドシートに転記できるんだね!すごく便利だね、catman!
猫男
猫男
catman
catman
そうだろう?次はこれを活用してみるといい。また何かあれば聞いてくれ、catmanが手伝ってやるさ。

練習問題: スプレッドシートを跨いでデータ操作をしてみよう

1. 自分のGoogleアカウントのGoogle Drive内にあるスプレッドシートAとスプレッドシートBを準備し、スプレッドシートAのデータをBに転記してみましょう。
2. 上記の記事内のID部分を自分のスプレッドシートIDに差し替えて、スクリプトを完成させよう。

解答・解説

以下はスプレッドシートAからBにデータを転記するスクリプトの例です。


function transferData() {
  var sourceSpreadsheetId = 'SOURCE_SPREADSHEET_ID'; // スプレッドシートAのID
  var sourceSheet = SpreadsheetApp.openById(sourceSpreadsheetId).getActiveSheet();
  
  var destinationSpreadsheetId = 'DESTINATION_SPREADSHEET_ID'; // スプレッドシートBのID
  var destinationSheet = SpreadsheetApp.openById(destinationSpreadsheetId).getActiveSheet();
  
  var values = sourceSheet.getDataRange().getValues(); // データの取得
  destinationSheet.getRange(1, 1, values.length, values[0].length).setValues(values); // データの書き込み
}

– このスクリプトはtransferDataという関数で、スプレッドシートAからBへデータを転記します。
sourceSpreadsheetIddestinationSpreadsheetIdを準備したスプレッドシートのIDに変更することで、目的の作業を実現できます。
getDataRange()setValues(values)でスプレッドシート間のデータの転送を行っています。