GASでGoogleスプレッドシートを扱う際には、スプレッドシートの構成について理解する必要があります。スプレッドシートはGAS上ではいくつかのブロックとして捉えることができます。
それぞれ以下の名前を使ってそれぞれのブロックを扱うことができるようになります。
スプレッドシート:SpreadSheet
シータタブ:Sheet
セル:Range
図にすると次のようなイメージです。
値のセット
はじめにスプレッドシートの「A1」のセルに値をセットしてみたいと思います。この場合、上記のブロックの階層に従い以下のように記述します。
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1').getRange('A1').setValue('テスト');
「myFunction」に上記コードを入力して、実行すると「A1」に「テスト」という値が入力されます。
詳しい説明は後述しますのでまずはこちらを実行してみてください。
補足
はじめてGASからスプレッドシートにアクセスをする場合は承認を求めるダイアログボックスが表示されます。
下記手順で許可してください。
承認を求めるダイアログが表示されるので「権限を確認」をクリックします。
アカウントの選択画面が表示されるのでツールを利用するアカウントを選択します。
「このアプリは Google で確認されていません」という警告が表示されるので「詳細」をクリックします。
詳細が表示されるので「Hello World(安全ではないページ)に移動」をクリックします。
Googleアカウントへのアクセスをリクエストされるので「許可」をクリックします。
セットされた値の確認とコードの説明
上記の承認が許可されると、先に実行された処理の実行結果として以下のようにスプレッドシートに値が設定されます。
スプレッドシートの「A1」セルに「テスト」という値を設定したこのコードについて解説します。
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1').getRange('A1').setValue('テスト');
先に掲載したスプレッドシートの構成をもう一度確認してください。
この構成に照らし合わせてコードの説明をします。
まず「SpreadsheetApp」ですが、これはSpreadsheetApp全体を意味し、これがベースとなりスプレッドシートに関連する多岐にわたるタスクをプログラム的に実行することができます。
「getActiveSpreadsheet()」は現在アクティブなスプレッドシートを取得するために使用されます。
「getSheetByName(‘シート1’)」では指定したシート(今回の場合は「シート1」)を取得するために使用されます。
「getRange(‘A1’)」は指定したセル(今回の場合は「A1」)を取得するために使用されます。
「setValue(‘テスト’)」では、引数に指定した値(今回の場合は「テスト」)をセルに設定します。
つまり大きなブロックからだんだんと範囲を絞っていって最後にセルまで絞り込めたら、最終的に「setValue(‘テスト’)」を使って値を設定したというイメージです。
値の取得
値の設定ができてところで、今度は値の取得を行います。
これも範囲を絞り込んでいくところまでは同様でそのセルへの動作として「getValue()」を使って値を取得します。
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1').getRange('A1').getValue();
上記コードにて「A1」に入力されている値を取得することができます。
確認のため、変数を用意して取得した値を代入してそれを「console.log()」を使用してコンソールに出力するようにします。
function myFunction() { let val = ''; val = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1').getRange('A1').getValue(); console.log(val); }
スプレッドシートのA1に「テスト」という文字列が入っている状況で上記を実行するとコンソールに「テスト」と表示されます。
■スプレッドシート
■実行結果
絞り込みについてのまとめ
GASでスプレッドシートを扱い場合には、対象となるセルを以下のように順番に絞り込んでいくことが基本になります。
頻繁に利用する考え方なのでこの流れを覚えておいてください。
スプレッドシート:SpreadSheet
シータタブ:Sheet
セル:Range
function myFunction() { const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); const sheet = spreadsheet.getSheetByName('シート1') sheet.getRange('A1').setValue('テスト'); }
このコードは最初に説明したセルに値を設定するコードと同じ意味のコードです。スプレッドシートまでを「spreadsheet」という変数にセットし、シータタブを「sheet」という変数にセットしています。
こうすることで、多くのセルを扱うプログラムでも以下のようにスッキリと記述することができます。
function myFunction3() { const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); const sheet = spreadsheet.getSheetByName('シート1') sheet.getRange('A1').setValue('テスト1'); sheet.getRange('B2').setValue('テスト2'); sheet.getRange('D5').setValue('テスト3'); }
練習問題
値の設定
「B3」のセルに「Hello World」という値を設定するコードを記述してください。
値の取得
「B3」のセルの値を取得してログを出力するコードを記述してください。