【GAS】Googleスプレッドシート
GAS……Google Apps Scriptの略。Googleのシステムを自動化したいときに便利。基本的にははJavaScriptと同じ。
GASはとても便利なんだけど、検索しても欲しいオブジェクトが見つけられなかったので書き残す。
今回、私が作成したのは、Googleスプレッドシートでカスタム関数を作成しました。
カスタム関数っていうのはマクロみたいに自分の好きな動作をする関数を作れるという機能です。また、エクセルのマクロと違って、パソコンで作成しておけば、スマホやタブレットからも簡単に使えるところが魅力的ですね。
私もタブレットからめんどくさい作業をするのは嫌なので自動化を図ってみた。
GASについて検索するとやり方自体はいっぱい出てくるから割愛するね。
Excelの関数にSUMIF()ってあるよね。条件に合致したものを足してくれる機能。
今回、足したいのは数字じゃなくて文字列を結合したい。
用途としては、条件に合う人の名前を全部書き出して欲しいと思ったんだ。
ひとことでいうと、SUMIFの文字列版です。
SUMNAMEIF(検索範囲x,"条件y",合計範囲z)で指定して使います。
検索範囲から条件に当てはまるものの合計範囲の文字列を結合します。
function SUMNAMEIF(x,y,z) { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var a = sheet.getRange(x).getColumn(); //検索範囲の列番号 var b = sheet.getRange(z).getColumn(); //合計範囲の列番号 var c = sheet.getRange(x).getRow(); //検索範囲の行番号 var d = sheet.getRange(z).getRow(); //合計範囲の行番号 var e = sheet.getRange(x).getNumRows();//検索範囲の行の数 var name = ""; for(var i = 0; i < e; i++ ){ if(sheet.getRange(c + i, a).getValue() == y){ name = name + sheet.getRange(d + i, b).getValue() + "、"; } } return name; }
とにかく.getColumn().getRow().getNumRows()が見つからなくて悪戦苦闘。
VBAと似てるだろうと思って、getRange()オブジェクトのプロパティを探してたのに,getColumn()もオブジェクトらしい。最後に()が必要なんてわからなくて、面倒でした。
getRangeを見たときにColumnで無理だったから、getColumnだろう!まではいってたのになぁ(苦笑)