LoginSignup
10
7

More than 5 years have passed since last update.

はじめてGoogleAppsScriptを触ってみた

Posted at

Anzible触るのが楽しいのですが、とりあえずなんでもやってみた性格が難な私です。

ここ最近少し作ってみたいものがあって触っていました。
今回はセルの基本的な操作まで書いていきます。
何も知らずにとりあえず書いてみてハマったところを中心に書いていきます。


最初の難関

初めてScriptエディタを開くと以下のような記述があって震えます。

function myfunction(){
}

...だからなんだよ(ーー;

細かいところは抜きにしてとりあえずいじってみたい、最初で挫折しない!
を目標にざっくばらんに書くとGASは文字通りクスリプト言語なので

単純にやりたいことを記述していく

ってことで自分のナニカを楽にする程度ならできるなと思います。
A+B=Cじゃないっすけど、やりたいことを関数に書いてその関数を実行すれば動きます。
その辺を念頭に置いて始めていきます。


スプレッドシートと作業シートの取得

魔法の言葉みたいなものです。
これを書いてどこで作業しているか書いてあげないとセルをいじったりができません。

・アクティブなシートを操作するとき
・明示的にどのシートを操作するかしていするとき

この2パターンについてまずは書いていきます。

アクティブシートの選択

とりあえず検索するといつも出てきます。
Excelマクロとか書いていてもなんか似たようなもんやってますね。

function myfunction(){
  var Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var Sheet = Spreadsheet.getActiveSheet();
}

こんな感じです。補足します
GASはJavaSprict形式のようです。
私はJS経験皆無です。
GAS書くときはとりあえずRubyとかみたいに変数型は意識しなくていいようです。var型にintだろうがStringだろうが打ち込んで動かすことができます。
とりあえず、変数使いたいときは

var 変数 = 値;

で動くことを覚えておけば変数が使えます。
これで変数使えますね(^^

シートの選択

function myfunction(n){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[n];
  return sheet;
}

引数でシートの要素番号を入力するとそれを返します。

セルの利用-Range-


スプレッドシートで何かするならまずできると嬉しいのが以下のこと
・セルの値を参照する
・セルに値を代入する
・セルに関数をセットする

最低限普通の動作を行う際使いそうですよね。
それでは順に見ていきたいと思います


その前に関数の利用に関して

さて、上記の項目をどうにかしていく方法を見ていきます。その前に、関数の中で関数を呼び出す方法とその戻り値についてせつめいします。

・関数の中で定義した関数を使用する方法

function myfunc1(int){
  var a = 5 * int;
  return a
}

function myfunction(){
  var x = myfunc1(10);
}

こんな感じです。
これ、わりと色んなものを見ても基礎すぎて流されてるんですよね。
でもここがわからないのが自分でした。

関数の利用は関数の中で定義した関数を呼び出せば使用できます。
myfunc1(int);
これで使えます。
intは引数なので例に書いたようにここには実際の値や変数を渡します。
関数の戻り値はそのまま変数に格納することもできます。
それが2つ目の例です。
このようにして処理を分けて記述することができます。
微妙に使いたいことがあったのですがわからなくて詰まった点でした。


さて、セルの操作についての説明に戻ります。
セル操作は

シートのオブジェクト.getRange(場所);

で得ることができます。
このシートのオブジェクトはさっきのシートを取得した式でもそれを格納した変数でもどちらでも構いません。

セルの参照

function myfunction(){
  var Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var Sheet = Spreadsheet.getActiveSheet();
  var cell = sheet.getRange(x,y);
}

getRange();を使います
これで取得したセルの値を変数に格納することができました!
RangeはExcelとかと同じですね。範囲で取得することができます。

セルに値をセットする

function myfunction(){
  var Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var Sheet = Spreadsheet.getActiveSheet();
  var cell = sheet.getRange(x,y);
  sheet.getRange(x,y);.setValue("hoge");
}

入力したいセルを指定してsetValue();を使用します。
参照と代入ができました。

関数の挿入

値の挿入を利用すると関数を挿入できません。
関数の挿入は以下のように行います。

function myfunction(){
  var Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var Sheet = Spreadsheet.getActiveSheet();
  var cell = sheet.getRange(x,y);
  sheet.getRange(x,y).setFormula('=TODAY()');
}

関数の挿入ができました。
関数の引数はもちろん指定できます

sheet.getRange(x,y).setFormula("=SUM(A10:A20)");

みたいに書きます。
関数の引数に変数を渡すこともできます。

.setFormula('=SUM(' + m + ')');

このmは変数で範囲を代入してあるとします。
ポイントは変数両隣の+です。
これないと展開できずにそのままmになってしまいます・・・

.setFormula('=SPLIT('+"A" + last +',"_")');

lastにはA列の最終行の行番号が入っているとします。
こうすると、A列の最終行セルに入っている文字列を_で分割しろといったことが可能になります。
+や’’を使ったりするのが大事なようです。

絶賛ちょこちょこ作っているのでまた書きたいと思います。

10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7