GASでスプレッドシートを自動化する
基本的な方法
1. はじめに
Googleスプレッドシートは、多くの人が日常的に使っているツールです。 しかし、毎日同じような作業を繰り返していませんか? GASを使えば、そんな単純作業を自動化できます。
この記事では、GASでスプレッドシートを操作する基本的な方法を解説します。 データの読み取りから書き込み、ループ処理まで、実践的なコード例とともに紹介します。
2. スプレッドシートを取得する
まず、操作対象のスプレッドシートを取得する方法を覚えましょう。 GASでは、いくつかの方法でスプレッドシートにアクセスできます。
方法1: アクティブなスプレッドシートを取得
スプレッドシートに紐づいたスクリプト(コンテナバインドスクリプト)の場合、 以下のコードで現在のスプレッドシートを取得できます。
function getActiveSpreadsheet() {
// アクティブなスプレッドシートを取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
// アクティブなシートを取得
const sheet = ss.getActiveSheet();
console.log('スプレッドシート名: ' + ss.getName());
console.log('シート名: ' + sheet.getName());
}
方法2: IDを指定して取得
スタンドアロンスクリプトの場合や、別のスプレッドシートを操作したい場合は、 スプレッドシートのIDを指定して取得します。
function getSpreadsheetById() {
// スプレッドシートのIDを指定して取得
// IDはURLの「/d/」と「/edit」の間の文字列です
const ss = SpreadsheetApp.openById('ここにスプレッドシートIDを入力');
const sheet = ss.getSheetByName('シート1');
console.log('シート名: ' + sheet.getName());
}
3. データを読み取る
スプレッドシートからデータを読み取る方法を解説します。
単一セルの値を取得
function readSingleCell() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// A1セルの値を取得
const value = sheet.getRange('A1').getValue();
console.log('A1の値: ' + value);
// 行・列番号で指定(1行目、1列目)
const value2 = sheet.getRange(1, 1).getValue();
console.log('1行1列の値: ' + value2);
}
範囲のデータを取得
function readMultipleCells() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// A1:C3の範囲を取得(2次元配列で返される)
const values = sheet.getRange('A1:C3').getValues();
// 取得したデータをログ出力
for (let i = 0; i < values.length; i++) {
console.log('行' + (i + 1) + ': ' + values[i].join(', '));
}
}
4. データを書き込む
データの書き込み方法を解説します。
単一セルに書き込む
function writeSingleCell() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// A1セルに値を書き込む
sheet.getRange('A1').setValue('Hello, GAS!');
// 行・列番号で指定して書き込む
sheet.getRange(2, 1).setValue('2行目のデータ');
}
複数セルに一括書き込み
function writeMultipleCells() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// 書き込むデータ(2次元配列)
const data = [
['名前', '年齢', '都市'],
['田中', 25, '東京'],
['佐藤', 30, '大阪'],
['鈴木', 28, '名古屋']
];
// A1から始まる範囲に一括書き込み
sheet.getRange(1, 1, data.length, data[0].length).setValues(data);
}
5. ループ処理で複数行を処理する
実務では、大量のデータを処理することが多いです。 ループ処理を使って、効率的にデータを処理しましょう。
function processAllRows() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// データがある最終行を取得
const lastRow = sheet.getLastRow();
// A列のデータを取得(2行目から最終行まで、1行目はヘッダーと想定)
const data = sheet.getRange(2, 1, lastRow - 1, 3).getValues();
// 各行を処理
for (let i = 0; i < data.length; i++) {
const name = data[i][0];
const age = data[i][1];
const city = data[i][2];
console.log(name + 'さんは' + age + '歳、' + city + '在住です。');
}
}
6. 実践例:データ集計スクリプト
最後に、実践的な例として、売上データを集計するスクリプトを作成してみましょう。
function calculateSales() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const lastRow = sheet.getLastRow();
// B列(売上金額)のデータを取得
const salesData = sheet.getRange(2, 2, lastRow - 1, 1).getValues();
// 合計を計算
let total = 0;
for (let i = 0; i < salesData.length; i++) {
total += salesData[i][0];
}
// 結果を出力
console.log('売上合計: ' + total + '円');
// 集計結果をシートに書き込む
sheet.getRange(lastRow + 2, 1).setValue('合計');
sheet.getRange(lastRow + 2, 2).setValue(total);
}
この記事で紹介した基本操作を組み合わせれば、 様々な業務の自動化が可能になります。 ぜひ、日々の作業で活用してみてください。
Seaside Lab
AIとWeb技術を活用したサービス開発を行っています。