見出し画像

【GAS】1.スプレッドシートのマクロ

 この記事は全文が無料である。読んだ後に幸せな気持ちになった人はぜひお金を落としていってほしい。

 スプレッドシートにはGASという名のマクロが存在する。

 GAS(Google Apps Script)はJavaScriptとほぼ同じ様式のプログラミング言語で動くマクロだ。そして、Googleフォーム、Googleカレンダー、Gメール、LINEの公式アカウントにまで、いともたやすく連携をすることができる。右上の「デプロイ」というところからはHPを作ることもできる。驚愕の事実は、これらがすべて無料であるという点だ。特にHPを作る上では、サーバーを借りたりいろいろ面倒なことがある。無料で頑張ろうとするとほぼ全ての場合で広告を表示しなければならない。どんな広告になるかはこちらが決められないため、いかがわしいものが表示されてしまっても文句が言えない。その心配がないのだ。である。Googleは神。筆者はGoogleなしでは生きていけない。明日Googleが爆発したらどうしようという不安を抱えたまま日々を生きている。

 想定されている読者は、ガチの初心者だ。プログラミングなどやったこともないという人もできるだけカバーしたい。そして、筆者の体験も込みだが、こういうサイトに求められているのは、「コードをコピペするだけですべてうまくいく」ことだろう。私も願わくば全世界のプログラミング難民向けのサイトにそうであってほしい。できるだけソースコードを載せるようにしたい。
 また、筆者は、プログラミング技術発展途上の20歳である。しかし、ことGASに関して、コーディングの腕は上の下くらいだと思ってもらって差し支えない。ある程度自信を持って書いているが、もし間違っていることや、不明瞭、不正確、冗長なことを書いていたら申し訳がない。コメント等で指摘していただければ幸いである。一応基本情報技術者の資格は持っている。
 ならびに、筆者は基本的には常体(だである)を好む。冷たく感じる文体になるかもしれないが、中身は接しやすい温厚人間なのでご了承いただきたい。

 一応、「プログラミング用語」かもと思う言葉には()で解説を付けていきたいと思っているが、そこまで配慮が回らなかったらごめんって感じだ。少なくとも太字にはすると思うので、分からなかったら各自ググってほしい。(ググる→Googleで検索する)
 こんな感じ。あと、筆者はWindowsユーザーなのでMacの人はそこを読み替えてほしい。大枠は変わらないと思う。


1.GASを使ってみよう

1-1. Apps Scriptの開き方

 メニューの「拡張機能」から「Apps Script」というのを押す。

Apps Script

 すると、別のタブに飛ばされる。

「Apps Script」を押下した直後の画面

 これがスプレッドシート(実はスプレッドシート限定ではないが)のマクロとなるGAS(Google Apps Script)のエディタ画面である。(エディタ→編集、プログラミングをするところ)

1-2. Logger.logでログを表示

function myFunction() {
  Logger.log("あ");
}

 あらゆるコードは基本的にはfunction なんとか(){}の{}の中に記述する。あ、半角で書くのを忘れないでね。全角は日本語だけの特殊様式だ。
 記念すべき1行目はLogger.logだ。上のコードをコピペして、Ctrl + S(保存)(世界一重要な作業)を押したのち、画面の上に表示されている「実行」を押してみてほしい。これは、「実行ログ」に、()の中の文字列を表示する関数だ。

解説することが多いときはここでまとめる。長くなる時もある気がするので、わかる人は基本的には飛ばして大丈夫だ。
Ctrl + S → 多くのプラットフォームにおいて「上書き保存」の役割を持つ。GASにおいても同様。保存されていない変更点が存在する場合には、左側にオレンジ色の〇が表示される。基本的にはこれをCtrl + Sで消すことを生きがいにしよう。ただし、「実行」を押しても自動で保存されるから、そこまで気にしなくても良いっちゃ良い。でも、よくまれにクラッシュすることがあり、そのときは容赦なく保存したところまで戻される。細かな保存をお勧めする。(ただし、2つ以上のデバイスで作業をすることがある場合には、特段の注意が必要。なぜなら、片方で5まで進めて、そのままにしておき、もう片方で8まで進めたとする。このとき、それを忘れて5で止まっている方でCtrl + Sするともう片方の方も5まで戻る8の進捗が無に帰する作業が終わったら必ず閉じることを習慣づければ大きな問題はない。)イメージとしては、Googleにあるデータと、我らのPCに映っているものは別々で、Ctrl + SをすることでGoogleにあるデータを上書きしている感じ。
文字列 → 「文字列」という言葉はプログラミングにおいては大きな意味を持つ。簡単に言えば、GASくんが認識してくれる文字形態の一つだ。GASくんは、「1」と言われたら、数字の1なのか、文字としての1なのか、区別する必要がある。これを区別するために、ダブルクオーテーション(")で囲み、「"1"」とする。これならばGASくんは「君は文字列なんだね」と認識できるようになる。これの幅広い応用として、日本語まで対応してくれている。つまり、日本語を書くときはすべからく" "(半角)で囲ってやる必要がある
関数 → 関数というのは、プログラミングにおいては「何かをする」ことを命令する文章である。関数の種類は多岐にわたるが、()の中身が空欄である場合と、()の中身がある場合がある。この()の中身は引数(ひきすう)と呼ばれる。引数がある場合には、その引数に応じた変化、またはその引数自体になにかを施すことが多い。今のところは、myFunction関数は()の中身が空欄である。すなわち、引数を取らない。一方でLogger.log関数は、「引数をログに表示する」役割を持っている。

用語補助解説
Logger.log("あ")の実行直後

 「実行」が灰色のままで押せない?それは間違いなくCtrl + Sを忘れている。
 「実行」を押すと、Googleのサーバーが実行してくれる。われらのPCのスペックは関係ない。これも嬉しいところだ。そして、ログに記録してくれる。逆に言えば、Logger.logをしないと全く記録してくれない。GASくんの頭の中で全部が処理されるだけである。Logger.logを書いておくことにより、それを言葉でしゃべってくれる、みたいなイメージだ。
 Logger.log関数は、今後はデバッグでよく利用することになる。(デバッグ→バグを直す工程のこと。バグのない人生などありえない)ちなみに、JavaScriptと言えばconsole.log関数の方が有名だろう。どちらもほぼ同じ役割を持つが、表示する内容が微妙に違う。ただ、使い分けるほどではない。私が使い慣れているLogger.logで統一する。ピンク色になって見やすいし。

 さて、ここまではGASくんにちょっとしたログの表示をお願いしただけである。帰国子女の人に「英語話せるの!何かしゃべってみて~!」というだるいフリをしただけだ。次は実際にスプレッドシートと連携していこう。

1-3. スプレッドシートに連携(権限を承認)

 ここからが本題である。

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); // 現在開いているスプレッドシートを取得
  var sheet  = ss.getActiveSheet();               // 現在開いているシートを取得
  sheet.getRange(1,1).setValue("あ");             // そのシートの1,1セルに"あ"と書き込む
}

 これをコピペして、実行してみよう。解説は後でする。そうすると、「承認が必要です」というポップアップが表示される。仕方なく承認してやろう。「権限を承認」をクリックすると、下のような画面が出る。

「権限を承認」を押下後

 めちゃめちゃ怖い。怖すぎる。でも、怖がることはない。いわば、何かのサブスクリプションを買うときとかの「同意する」みたいなフェーズで、Google側としてもやらなければいけない作業なのである。この場合には、SpreadsheetApp.getActiveSpreadsheet()という、「現在開かれているスプレッドシートを取得する」関数に、「スプレッドシートを参照する」という権限が必要であるから、実行者によって承認を得られない限りGoogle側も実行できないのである。逆に言えば、Logger.logは何の権限も必要ない関数であったということだ。
 ここから進めるためには、左下の「詳細」を押す。

「詳細」を押下後

 さらにその下の「~に移動」を押す。

「~に移動」押下後

 ところで、私の個人的なメールアドレスが映っているが、まあ気にしていない。いじわるしないでね。
 ここで、「許可」を押す。これにより、今回は「Googleスプレッドシートのすべてのスプレッドシートの参照、編集、作成、削除」の権限をGoogleに与えることになる。Googleは神様だから、全幅の信頼を置こう。
 そうすれば、晴れて動く。今回はLogger.logは載せていないので、何も表示されないはずだ。ところで、この関数はスプレッドシートに"あ"と書く関数だった。上のタブから元のスプレッドシートの画面に戻ってみよう。すると…?

戻ってきた

 何もしていないのに、「あ」という文字列が入っているのが分かるだろう。GASの第一歩だ。

 軽くコードの解説をする。再掲。

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); // 現在開いているスプレッドシートを取得
  var sheet  = ss.getActiveSheet();               // 現在開いているシートを取得
  sheet.getRange(1,1).setValue("あ");             // そのシートの1,1セルに"あ"と書き込む
}

var → 「変数宣言」。「変数」というのは、よく「」と表現される。筆者の理解の仕方は、「略し方」である。大体の場合は、「SpreadsheetApp.getActiveSpreadsheet()っていう正式名称を毎回書くの面倒だからssって略します」っていう意味。GASで使われているJavaScriptは、変数宣言のvarは必要なものの、ほとんど意味がない。というのも、JavaやCなどのガチ言語はもっと詳細に「こういう変数を使います」というように宣言する必要がある。逆に、Pythonのようにvarすらいらないものもある。ちなみに、varはletでもよい。Logger.logとconsole.logくらいの違い。
var sheet = ~ → 1行前で定義したssを用いてまた略す。これは正式名称はssの分まで書くと、「SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()」である。これが長すぎるから一旦「ss.getActiveSheet()」まで略して、さらに面倒だから「sheet」まで略したのである。うまい略し方を定義しているだけで、sheetという名前は何でもよい。aでもよい。でも、さすがにaだと何を表すかが謎になってしまうから、sheetにしている。
.getRange(1,1) → getRangeは、sheet.getRangeのようにハイフンをはさむ。そして、〇行目〇列目、という二つの数字の組を、カンマ,で区切って()に入れる。すなわち、getRange(1,1)は「1行目1列目のセルを取ってきて」という意味である。
.setValue("あ") → さきほどgetRangeしたセル(A1)に対して、できることが二つ(もっとあるが)あり、getValue()setValue()だ。getValue()は書いてある文字を取ってくる。今回は書き込みたいので、setValue()で、かっこの中身の文字列を書き込んでいる。
ちなみに、正式名称で書くと、SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(1,1).setValue("あ") である。略したくなるだろう。

コード解説

 私は今バイトを辞めたので無職である。お金を落とす余裕のある方はぜひ、私の小遣いの足しにしてほしい。おねがいっ!

ここから先は

0字

¥ 100

この記事が気に入ったらサポートをしてみませんか?