無料のGoogle Apps Scriptで業務を効率化!Google Sheetsデータ分析の前処理自動化入門
はじめに
データ分析の重要性が増す中で、多くのビジネスパーソンが日々データと向き合っています。特に、表計算ソフトはデータの整理や集計に欠かせないツールですが、分析を始める前の「データの収集」や「前処理」に多くの時間を費やしているケースが少なくありません。手作業でのデータ入力や整形は、時間がかかるだけでなく、ミスの原因にもなり得ます。
この記事では、Google Sheetsのユーザーであれば誰でも無料で利用できる「Google Apps Script(GAS)」を使って、これらの定型的なデータ作業を自動化し、データ分析の効率を大幅に向上させる方法をご紹介します。プログラミング経験がない方でも理解できるよう、基本的な使い方から具体的な活用例までを平易に解説します。
Google Apps Script(GAS)とは
Google Apps Script(GAS)は、Googleが提供するクラウドベースのスクリプト開発環境です。Google Drive、Google Sheets、Gmail、Google Calendarなど、様々なGoogleサービスを連携させたり、機能を拡張したりすることができます。
大きな特徴は、環境構築が一切不要で、ウェブブラウザ上でコードを書いてすぐに実行できる点です。使用する言語はJavaScriptをベースとしており、比較的学びやすいとされています。そして、基本的な利用は無料です。
データ分析のワークフローにおいて、GASは主に以下の段階で役立ちます。
- データの収集: 外部のウェブサイトやAPIから簡単なデータを定期的に取得し、Sheetsに書き込む。
- データの前処理: Sheets内のデータを自動的に整形、クリーニング、集計する。
- レポート作成: 集計結果を元に、簡易的なレポートを自動生成したり、メールで送信したりする。
なぜデータ分析にGASが役立つのか?
GASをデータ分析のプロセスに組み込むことには、以下のようなメリットがあります。
- 作業時間の短縮: 繰り返し行うデータ収集や前処理のタスクを自動化することで、手作業にかかる時間を大幅に削減できます。
- ミスの削減: 定型作業をスクリプトに任せることで、手作業による入力ミスやコピペミスを防ぎ、データの正確性を高めることができます。
- リアルタイム性の向上: 定期的な自動実行を設定することで、常に最新に近いデータをSheetsに反映させることが可能になります。
- 既存ツールとの連携: 普段使用しているGoogle SheetsやGoogle Driveといったツールとシームレスに連携できるため、新たなツール導入のハードルが低いのが特徴です。
一方で、デメリットとしては、複雑な統計分析や大規模なデータ処理には向いていない点が挙げられます。あくまでGoogle Sheetsの補助ツールとして、データの前処理や収集の自動化に強みを発揮するものと理解するのが良いでしょう。
GASの使い方(基本ステップ)
それでは、実際にGoogle SheetsでGASを使い始める基本的なステップを見ていきましょう。
-
スクリプトエディタを開く
- Google Sheetsを開き、上部メニューの「拡張機能」をクリックします。
- 表示されるメニューの中から「Apps Script」を選択します。
- 新しいブラウザタブで「スクリプトエディタ」が開きます。
-
スクリプトを書く
- スクリプトエディタには、最初から
myFunction()
という関数が記述されています。この中に、実行したい処理をJavaScriptベースで記述します。 - 例として、アクティブなSheetsのA1セルに「Hello, GAS!」と書き込む簡単なスクリプトを書いてみましょう。
```javascript function myFunction() { // アクティブなスプレッドシートを取得 var ss = SpreadsheetApp.getActiveSpreadsheet(); // アクティブなシート(現在開いているシート)を取得 var sheet = ss.getActiveSheet();
// A1セルを取得し、値を設定する var cell = sheet.getRange("A1"); cell.setValue("Hello, GAS!"); }
`` * コード内の
//より後ろはコメントです。スクリプトの動作には影響せず、コードの説明を書くために使用します。 *
SpreadsheetApp.getActiveSpreadsheet()は、現在作業しているGoogle Sheetsを取得する命令です。 *
ss.getActiveSheet()は、そのSheetsの中で現在アクティブになっているシートを取得する命令です。 *
sheet.getRange("A1")は、指定したシートの中の「A1」というセル(あるいは範囲)を取得する命令です。 *
cell.setValue("Hello, GAS!")` は、取得したセルに「Hello, GAS!」という値を書き込む命令です。 - スクリプトエディタには、最初から
-
スクリプトを保存する
- スクリプトエディタの左上にある保存アイコン(フロッピーディスクのマーク)をクリックします。
- プロジェクト名の入力を求められるので、分かりやすい名前(例: 「データ自動化スクリプト」)を付けて保存します。
-
スクリプトを実行する
- スクリプトエディタのメニューバーにある実行ボタン(▶︎マーク)をクリックします。
- 初回実行時には、GASがGoogleアカウントにアクセスするための許可を求められます。「権限を確認」をクリックし、指示に従って承認してください。これは、GASがSheetsに対して書き込みなどの操作を行うために必要な手続きです。
- 承認後、スクリプトが実行されます。Google Sheetsに戻ってA1セルを確認してみましょう。「Hello, GAS!」と書き込まれているはずです。
-
トリガーを設定する(自動実行)
- 定期的にスクリプトを実行したい場合は、「トリガー」を設定します。
- スクリプトエディタの左側にある時計のアイコン(トリガー)をクリックします。
- 画面右下にある「トリガーを追加」ボタンをクリックします。
- 実行したい関数名(例:
myFunction
)、実行するイベントソース(例: 「時間主導型」)、時間隔(例: 「時間タイマー」「分タイマー」など)を設定します。 - 設定を保存すると、指定した時間間隔でスクリプトが自動的に実行されるようになります。
具体的な活用例:Sheets内の定型前処理を自動化
ここでは、より実践的な例として、Google Sheetsに入力されたデータを整形する作業をGASで自動化する方法を解説します。
例えば、日々入力される顧客データがあり、以下のような前処理が必要だとします。
- 「氏名」列の姓と名を分けたい。
- 「電話番号」列のハイフンを取り除き、数値形式に統一したい。
- 「登録日」列の表示形式を統一したい。
これらの作業をGASで行うスクリプトの基本的な構造は以下のようになります。
function preprocessCustomerData() {
// 処理対象のシート名
var sheetName = "顧客データ";
// 処理対象のシートを取得
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(sheetName);
// データが入力されている範囲を取得(ヘッダー行を除く)
// 仮にデータがA2セルから始まると想定
var range = sheet.getDataRange(); // データがある全範囲を取得
var values = range.getValues(); // 範囲内の全ての値を取得(二次元配列)
// ヘッダー行を除いて処理を開始するため、1行目からループ
// values[0]がヘッダー行なので、ループは i = 1 から始める
for (var i = 1; i < values.length; i++) {
var row = values[i]; // 各行のデータを取得
// 例:氏名列(仮に0列目=A列)の処理 - 姓と名に分割
// 元の氏名が「山田 太郎」のようにスペース区切りと想定
var fullName = row[0];
if (fullName && typeof fullName === 'string') { // 値があり、文字列の場合のみ処理
var names = fullName.split(" "); // スペースで分割
row[0] = names[0] || ""; // 姓(A列に残す)
// 新しい列に名を書き出す場合は、values配列に追加するか、
// 別の列の値を更新する。ここでは仮にB列(1列目)に名を書き出すとする。
// 実際には、事前にシートに「姓」「名」といった列を用意しておくことが多いです。
// 例として、今回は元の列(0列目)を姓とし、新しい列(1列目)に名を書き出す
if (row.length <= 1) row.push(""); // 1列目が存在しない場合に追加
row[1] = names[1] || ""; // 名
// 元の氏名列(0列目)には姓を残す
// row[0] = names[0] || ""; // この行は上記で既に実行済み
}
// 例:電話番号列(仮に2列目=C列)の処理 - ハイフン除去
var phoneNumber = row[2];
if (phoneNumber && typeof phoneNumber === 'string') { // 値があり、文字列の場合のみ処理
row[2] = phoneNumber.replace(/-/g, ""); // ハイフンを全て空文字に置き換え
}
// 例:登録日列(仮に3列目=D列)の処理 - 表示形式統一
// GAS側で日付オブジェクトとして扱えている場合は、特にスクリプトでの変換は不要なことが多いですが、
// もし文字列として取得されてしまう場合や、特定の形式に強制したい場合は処理が必要です。
// ここでは、日付オブジェクトとして取得されている前提で、特にスクリプト内での値の変更は行いません。
// 表示形式の統一は、GASではなくSheetsのセルの書式設定で行うのが一般的です。
// ただし、GASで日付形式の文字列を生成して書き込むことも可能です。
// 例:取得した値がDateオブジェクトの場合、"YYYY/MM/DD"形式の文字列に変換して書き直す
var registrationDate = row[3];
if (registrationDate instanceof Date) { // 値がDateオブジェクトの場合
var year = registrationDate.getFullYear();
var month = ('0' + (registrationDate.getMonth() + 1)).slice(-2); // 月は0から始まるため+1し、2桁に整形
var day = ('0' + registrationDate.getDate()).slice(-2); // 日を2桁に整形
row[3] = year + '/' + month + '/' + day; // YYYY/MM/DD形式の文字列にする
}
// 処理済みの行データを元のvalues配列に戻す(これは不要。row変数はvalues[i]への参照なので、rowへの変更はvalues[i]に反映される)
// values[i] = row; // この行は不要
}
// 処理後の二次元配列をまとめてSheetsに書き戻す
// ヘッダー行も含む全範囲に書き戻す
range.setValues(values);
Logger.log("顧客データの前処理が完了しました。"); // ログにメッセージを出力(スクリプトエディタの「実行ログ」で確認可能)
}
- このスクリプトは、指定したシートのデータ範囲を取得し、各行のデータに対して処理を行います。
getValues()
で取得したデータは二次元配列(配列の中に配列が入っている構造)になります。values[i]
がi+1
行目のデータ、values[i][j]
がi+1
行目のj+1
列目のデータに対応します(配列のインデックスは0から始まるため)。split()
,replace()
などはJavaScriptの標準機能です。- 処理が終わった
values
配列全体を、元の範囲にsetValues()
でまとめて書き戻します。
このスクリプトを保存し、手動で実行したり、時間トリガーを設定したりすることで、定型的な前処理作業を自動化できます。新しいデータが追加された際に手動でスクリプトを実行したり、「スプレッドシート編集時」にトリガーを設定して、データが変更されるたびに自動的に処理が走るように設定することも可能です。
よくある疑問や注意点
- GASの実行時間やクォータ制限は? 無料アカウントの場合、GASの実行時間や、外部サービスへのリクエスト回数などには一日あたりの制限があります。非常に大規模なデータ処理や、頻繁な外部連携を行う場合は制限に達する可能性があります。詳しくは公式ドキュメントを参照してください。
- デバッグはどうすればいい?
スクリプトエディタにはデバッグ機能があります。ブレークポイントを設定したり、
Logger.log()
を使って変数の中身や処理の経過をログに出力したりして、エラーの原因を特定できます。 - 外部API連携の注意点は? 外部サービスのAPIを利用する際は、そのサービスの利用規約を必ず確認してください。認証情報の管理には十分注意し、コードに直接書き込まず、Script Propertiesなどの安全な方法で管理することを推奨します。
- すべてのデータ分析をGASで行うべき? GASはデータの前処理や収集の自動化に非常に強力ですが、複雑な統計解析、高度な機械学習、インタラクティブな可視化などには向いていません。これらの目的には、Google Sheetsの関数、ピボットテーブル、Looker Studio、あるいはPythonなどの専門的なツールを適宜組み合わせることが重要です。GASはあくまで「データ分析の効率化」のためのツールとして位置づけるのが現実的です。
まとめ
Google Apps Script(GAS)は、Google Sheetsユーザーがデータ分析の初期段階(収集や前処理)の作業を効率化するための強力な無料ツールです。プログラミング初心者でも取り組みやすく、環境構築なしに始められる点が大きな魅力です。
この記事で紹介した基本的な使い方や具体例を参考に、まずは身近な定型作業の自動化から試してみてはいかがでしょうか。GASをうまく活用することで、これまで手作業に費やしていた時間を削減し、より本質的なデータ分析や意思決定に集中できるようになるはずです。
GASで効率化したデータを使って、Google Sheetsのピボットテーブルや関数で集計したり、Google Looker Studioで可視化したりと、他の無料ツールと組み合わせて活用することで、データに基づいた業務改善をさらに加速させることができます。ぜひ、データ活用の第一歩としてGASによる自動化を取り入れてみてください。