Google スプレッドシートの拡張

Google Apps Script を使用すると、Google スプレッドシートで新しいことや素晴らしい作業を行うことができます。Apps Script を使用すると、Google スプレッドシートにカスタム メニューダイアログ、サイドバーを追加できます。スプレッドシート用のカスタム関数を作成できるほか、カレンダー、ドライブ、Gmail などの他の Google サービスとスプレッドシートを統合することもできます。

Google スプレッドシート用に設計されたスクリプトのほとんどは、スプレッドシート内のセル、行、列を操作するために配列を操作します。JavaScript の配列に馴染みがない場合は、Codecademy の配列用の優れたトレーニング モジュールを提供しています。(このコースは Google が開発したものではなく、Google とは関係ありません)。

Google スプレッドシートで Apps Script を使用する方法については、マクロ、メニュー、カスタム関数に関する 5 分間のクイックスタート ガイドをご覧ください。

使ってみる

Apps Script には、Google スプレッドシートをプログラムで作成、読み取り、編集できる特別な API が含まれています。Apps Script は、主に 2 つの方法で Google スプレッドシートとやり取りできます。1 つのスクリプトは、スプレッドシートに対する適切な権限があれば、どのスクリプトでもスプレッドシートを作成または変更できます。もう 1 つは、スクリプトをスプレッドシートにバインドすることができ、スクリプトは特別な機能を使用してユーザー インターフェースを変更する、またはスプレッドシートを開いたときに応答します。バインドされたスクリプトを作成するには、Google スプレッドシート内で [拡張機能] > [Apps Script] を選択します。

スプレッドシート サービスは、Google スプレッドシートを 2 次元配列で処理するグリッドとして扱います。スプレッドシートからデータを取得するには、データが保存されているスプレッドシートにアクセスし、データを保持するスプレッドシートの範囲を取得して、セルの値を取得する必要があります。Apps Script は、スプレッドシート内の構造化データを読み取り、その JavaScript オブジェクトを作成することで、データに簡単にアクセスできます。

データの読み取り

次の画像に示すように、スプレッドシートに製品名と製品番号のリストを保存しているとします。

次の例は、プロダクト名とプロダクト番号を取得してログに記録する方法を示しています。

function logProductInfo() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  for (var i = 0; i < data.length; i++) {
    Logger.log('Product name: ' + data[i][0]);
    Logger.log('Product number: ' + data[i][1]);
  }
}

ログの表示

記録されたデータを表示するには、スクリプト エディタの上部にある [実行ログ] をクリックします。

データの書き込み

スプレッドシートに新しいプロダクト名や番号などのデータを保存するには、スクリプトの最後に次のコードを追加します。

function addProduct() {
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.appendRow(['Cotton Sweatshirt XL', 'css004']);
}

上記のコードは、指定された値を持つ新しい行をスプレッドシートの下部に追加します。この関数を実行すると、スプレッドシートに新しい行が追加されます。

カスタム メニューとユーザー インターフェース

Google スプレッドシートでは、カスタム メニュー、ダイアログ ボックス、サイドバーを追加してカスタマイズできます。メニュー作成の基本については、メニューのガイドをご覧ください。ダイアログ ボックスのコンテンツのカスタマイズについては、HTML サービスのガイドをご覧ください。

スプレッドシート内の画像や図形描画にスクリプト関数を追加することもできます。この関数は、ユーザーが画像または図形描画をクリックすると実行されます。詳しくは、Google スプレッドシートの画像と図形描画をご覧ください。

カスタム インターフェースをアドオンの一部として公開する場合は、スタイルガイドに沿って、Google スプレッドシート エディタのスタイルとレイアウトとの整合性を確保してください。

Google フォームに接続中

Apps Script を使用すると、フォーム サービスやスプレッドシート サービスを介して Google フォームを Google スプレッドシートに接続できます。この機能を使用すると、スプレッドシートのデータに基づいて Google フォームを自動的に作成できます。Apps Script では、ユーザーがフォームに回答した後に、onFormSubmit などのトリガーを使用して特定のアクションを実行することもできます。Google スプレッドシートを Google フォームに接続する方法について詳しくは、Google フォームの回答の管理に関する 5 分間のクイックスタートをお試しください。

形式

Range クラスには、セルまたはセル範囲の形式にアクセスして書式を変更する setBackground(color) などのメソッドがあります。次の例は、範囲のフォント スタイルを設定する方法を示しています。

function formatMySpreadsheet() {
  // Set the font style of the cells in the range of B2:C2 to be italic.
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var cell = sheet.getRange('B2:C2');
  cell.setFontStyle('italic');
}

データの検証

Apps Script を使用すると、Google スプレッドシートの既存のデータ検証ルールにアクセスしたり、新しいルールを作成したりできます。たとえば、次のサンプルは、1 ~ 100 の数値のみを許可するデータ検証ルールを設定する方法を示しています。

function validateMySpreadsheet() {
  // Set a rule for the cell B4 to be a number between 1 and 100.
  var cell = SpreadsheetApp.getActive().getRange('B4');
  var rule = SpreadsheetApp.newDataValidation()
     .requireNumberBetween(1, 100)
     .setAllowInvalid(false)
     .setHelpText('Number must be between 1 and 100.')
     .build();
  cell.setDataValidation(rule);
}

データ検証ルールの操作の詳細については、SpreadsheetApp.newDataValidation()DataValidationBuilderRange.setDataValidation(rule) をご覧ください。

グラフ

Apps Script では、特定の範囲内のデータを表すグラフをスプレッドシートに埋め込むことができます。次の例では、セル A1:B15 にグラフ化可能なデータがあると仮定して、埋め込み棒グラフを生成します。

function newChart() {
  // Generate a chart representing the data in the range of A1:B15.
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];

  var chart = sheet.newChart()
     .setChartType(Charts.ChartType.BAR)
     .addRange(sheet.getRange('A1:B15'))
     .setPosition(5, 5, 0, 0)
     .build();

  sheet.insertChart(chart);
}

スプレッドシートにグラフを埋め込む方法について詳しくは、EmbeddedChart と、EmbeddedPieChartBuilder などの特定のグラフ ビルダーをご覧ください。

Google スプレッドシートのカスタム関数

カスタム関数は、=SUM(A1:A5) などの組み込みのスプレッドシート関数と似ていますが、Apps Script で関数の動作を定義するという点で異なります。たとえば、値をインチからミリメートルに変換するカスタム関数 in2mm() を作成し、セルに =in2mm(A1) または =in2mm(10) を入力してスプレッドシートで数式を使用します。

カスタム関数の詳細については、メニューとカスタム関数の 5 分間クイックスタートを試すか、より詳細なカスタム関数ガイドをご覧ください。

マクロ

Google スプレッドシートの UI から Apps Script コードを実行する別の方法として、マクロがあります。カスタム関数とは異なり、キーボード ショートカットまたは Google スプレッドシートのメニューから有効にします。詳細については、Google スプレッドシートのマクロをご覧ください。

Google スプレッドシート向けアドオン

アドオンは、Google スプレッドシート内で実行される特別にパッケージ化された Apps Script プロジェクトであり、Google スプレッドシート アドオンストアからインストールできます。Google スプレッドシート用のスクリプトを作成し、広く共有する場合は、Apps Script でスクリプトをアドオンとしてpublishし、他のユーザーがアドオンストアからインストールできます。

トリガー

Google スプレッドシート ファイルにバインドされたスクリプトでは、onOpen() 関数や onEdit() 関数などの単純なトリガーを使用して、スプレッドシートの編集権限を持つユーザーがスプレッドシートを開いたとき、またはスプレッドシートを編集したときに、自動的に応答できます。

単純なトリガーと同様に、インストール可能なトリガーを使用すると、特定のイベントが発生したときに Google スプレッドシートで自動的に関数を実行できます。ただし、インストール可能なトリガーは、単純なトリガーよりも柔軟性が高く、オープン、編集、変更、フォーム送信、時間ドリブン(時計)のイベントをサポートしています。