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 つのセルに 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 スプレッドシート内で実行され、Google スプレッドシートのアドオンストアからインストールできる、特別にパッケージ化された Apps Script プロジェクトです。Google スプレッドシート用のスクリプトを開発し、それを世界中と共有する場合、Apps Script ではスクリプトをアドオンとして公開できます。これにより、他のユーザーがアドオンストアからスクリプトをインストールできるようになります。

トリガー

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

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