選択範囲に応じた関数の設定
このように、setFormula("=SUM(A1:A9)")といった形でテキストとして関数を設定するのは非常に簡単に行えます。が、引数にセルの範囲を指定して使う場合、そのセル範囲をダイナミックに指定する場合もあるでしょう。このような場合には、どのようにしてセル範囲を取得し指定するかを考える必要があります。
例として、「選択されたセル範囲の合計を、その下にあるセルに表示する」という場合を考えてみましょう。マウスでセルを選択してスクリプトを実行すると、その各列の合計を、選択されセル範囲のすぐ下のセルにSUM関数を使って表示します。つまり、現在選択されているセル範囲を基に、関数を設定するセルと、そこに用意するSUM関数の引数(どのセル範囲を合計するか)をダイナミックに取得し設定するわけです。
function setSUM(){ var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var range = sheet.getActiveRange(); var r = range.getRowIndex(); var rw = range.getHeight(); var c = range.getColumnIndex(); var cw = range.getWidth(); var nextrange = sheet.getRange(r + rw,c,1,cw); for(var i = 0;i < cw;i++){ var rowrange = sheet.getRange(r,c + i,rw,1); var A1str = rowrange.getA1Notation(); var cell = nextrange.getCell(1, i + 1) cell.setFormula("=SUM(" + A1str + ")"); } }
選択されたセル範囲は、getActiveRangeで得られます。そのセル範囲は、以下の関数を使うことで調べることができます。
関数名 | 概要 |
getRowIndex | Rangeの一番最初の行番号を返します。 |
getColumnIndex | Rangeの一番最初の列番号を返します。 |
getLastRow | Rangeの一番最後の行番号を返します。 |
getLastColumn | Rangeの一番最後の列番号を返します。 |
getHeight | Rangeの行数を返します。 |
getWidth | Rangeの列数を返します。 |
また、行・列の番号をもとにしてRangeを取得する場合、getRangeの引数にそれらを指定してやります。例えば次のような具合です。
《Sheet》.getRange( 行番号 , 列番号 ) 《Sheet》.getRange( 行番号 , 列番号 , 行数 , 列数 )
これらのメソッドを利用することで、選択された範囲を調べたり、それに隣接するセルの行列番号を取得したりできるようになります。では、SUM関数の引数に指定するセル範囲の表記はどのようにして取得するのでしょうか。SUMなどの関数では、行列番号ではなく、"A1:A10"といった形式でセルを指定します。
この表記を調べるには、Rangeオブジェクトの「getA1Notation」というメソッドを利用します。これは、そのRangeの"A1"形式の表記テキストを返すメソッドです。これで取得したテキストをSUM関数の引数に渡し、setFormulaすればいいわけです。
ユーザー情報の取得
Google Apps Scriptは、Googleスプレッドシートだけで利用可能なものではありません。その他のサービスと連携した処理もいろいろと用意されています。それらについても紹介しましょう。まずは、ユーザー情報についてです。
function showUserData(){ var user = Session.getUser(); var mail = user.getEmail(); var id = user.getUserLoginId(); Browser.msgBox(mail + "\n" + id); }
これは、ログインしているユーザーのIDとメールアドレス(通常、両者は同じになります)を表示するサンプルです。アクセスしているユーザーに関する情報は、「User」オブジェクトとして用意されています。これは、セッションを管理する「Session」オブジェクトから取得できます。「Session.getUser()」を呼び出すことで、現在ログインしているユーザーのUserオブジェクトが得られます。
このUserオブジェクトには「getEmail」「getUserLoginId」といったメソッドが用意されています。これらにより、ユーザーのメールアドレスやログインIDが取得できます。ログインしているユーザーのチェックなどに利用できます。