Google Apps Scriptでスプレッドシートのセルの値を取得・変更する ~Google Analyticsのレポートを自動作成 その弐~
こんにちは。広報担当の小林です。
前回に引き続き、Google Analyticsの統計レポートの自動作成手順をご紹介します。
手順は以下の通り、Googleスライドを作成します。
- Google Apps Scriptを動かしてみる
- Google Apps Scriptでスプレッドシートのセルの値を取得・変更する
- Google Analytics apiを使ってアクセス情報をスプレッドシートに表示する
- Google Slides apiを使ってスライドの中身を書き換える
今回は②、Google Apps Scriptでスプレッドシートのセルの値を取得・変更してみたいと思います。
Google Apps Scriptでスプレッドシートのセルの値を取得・変更する
Google Apps Script(以下GAS)の基本的な使い方は前回の記事をご覧ください。
今回はGASを使用してスプレッドシートのセルの値を操作していきます。
Excel VBAを触れた経験がある方は取っ付きやすいと思います。
題材として以下のようなスプレッドシートを使用します。
前回同様スプレッドシートを作成してスクリプトエディタを開きましょう。
スクリプトエディタは上部メニューにある「ツール」の「スクリプトエディタ」を押せば開きます。
セルを取得する
まずセル(Range)オブジェクトを取得します。
セルオブジェクトの取得には getRange() メソッドを使用します。
SheetObject.getRange(range)
getRange() の引数によって取得するセルの範囲を指定することもできます。
function getVal(){ //シートを取得 var sheet = SpreadsheetApp.getActive().getSheetByName('シート1'); //セルを取得 var range1 = sheet.getRange('A1'); //A1を取得 var range2 = sheet.getRange('A2:D2'); //A2~D2の範囲を取得 var range3 = sheet.getRange(2, 3); //getRange(n番目の行, n番目の列) C2を取得 var range4 = sheet.getRange(3, 1, 2, 3); //getRange(n番目の行, n番目の列, n行取得, n列取得) A3~C4の範囲を取得 }
セルの値を取得する
次にセルオブジェクトから値を取り出します。
値の取得には getValue() 又は getValues() メソッドを使用します。
rangeObject.getValue()
rangeObject.getValues()
getValue() は指定した範囲の最も左上にあるセルの値を返します。
getValues() は指定した範囲の全てのセルの値を二次元配列で返します。
実際に上で取得したセルの値を取り出してみましょう。
function getVal(){ //シートを取得 var sheet = SpreadsheetApp.getActive().getSheetByName('シート1'); //セルを取得 var range1 = sheet.getRange('A1'); //A1を取得 var range2 = sheet.getRange('A2:D2'); //A2~D2の範囲を取得 var range3 = sheet.getRange(2, 3); //getRange(n番目の行, n番目の列) C2を取得 var range4 = sheet.getRange(3, 1, 2, 3); //getRange(n番目の行, n番目の列, n行取得, n列取得) A3~C4の範囲を取得 //range4から値を取得する var cellValue = range4.getValue(); //結果:A3 var cellArray = range4.getValues(); //結果:[[A3,B3,C3],[A4,B4,C4]] //ログの表示 Logger.log(cellValue); Logger.log(cellArray); }
値を取得後にログを表示しています。
getValues() で取得した値は上記の通りに次元配列になります。
上のスクリプトの場合は
cellArray[0][0] → A3
cellArray[1][2] → C4
となります。
セルの値を変更する
最後にセルの値を変更します。
セルの値の変更は setValue() 又は setValues() メソッドです。
rangeObject.setValue(value)
rangeObject.setValues(array)
setValue() を複数セルに対して使用すると、指定した範囲の値が全て同じ値に変更されます。
複数セルに対して別々の値を入れる場合は setValues() を使用して下さい。
以下がソースです。
function setVal(){ //シートを取得 var sheet = SpreadsheetApp.getActive().getSheetByName('シート1'); //セルを取得 var range1 = sheet.getRange('A5'); //A5を取得 var range2 = sheet.getRange('B5:D5'); //B5~D5を取得 var range3 = sheet.getRange(6, 1, 2, 4); //A6~D7を取得 //range1,range2の値をsetValue()を使用して変更 range1.setValue('い'); //A5の値が 'い' に変わる range2.setValue('ろ'); //B5~D5全ての値が 'ろ' に変わる //range3の値をsetValues()を使用して変更 range3.setValues([['は','に','ほ','へ'],['と','ち','り','ぬ']]); //A6~D7の値が順に 'は','に','ほ','へ','と','ち','り','ぬ' に変わる }
実行すると以下のようにセルの値が変更されます。
setValues() に渡す引数は getValues() の返り値同様、二次元配列です。
範囲が1行でも同様ですのでご注意を。
スプレッドシートの操作に関しては以上になります。
少しでもお役に立てば幸いです。
次回は対にGoogle Analyticsからデータを取得していきたいと思います。
それではまた。