Google Spreadsheet でマクロを扱う

  • SmartBee

最終更新⽇:

掲載⽇:

# Google Spreadsheetの弱点

Google Spreadsheetは、もはや説明不要の便利な表計算ツールですね。
ブラウザ上で立ち上げられることと、特殊な操作が不要で複数人が編集可能であることが、
大きな強みとして挙げられると思います。
関数群も豊富で、もはやちょっとしたツールなら、Webアプリを作るよりも遥かに早く、
目的のツールを作ることが出来てしまいます。

しかし、そんなSpreadsheetにも、弱点が存在します。

それは、
マクロが標準装備されていない
んですね。

関数は豊富ですが、それはあくまで与えられた値を計算して出力するもの、
直接値を書き換える必要があるときには使うことが出来ません。
表計算ツールとして考えるとそれで十分なのですが、
やはり、値の書き換えは出来たほうがやれることの幅が広がる...。
そんな時に役に立つものがありました。

それが、 Apps Scriptです!!

# Google Apps Script

Apps Script (以下:GAS) は、Googleが提供するサービスの自動化をすることを主目的にされたスクリプト言語です。
使い慣れたJavascriptライクな構文を使用することが出来ます。
このスクリプトの記述も、ブラウザ上で編集/実行/テストが可能という特徴を持ち、
ローコストな開発が可能です。

https://workspace.google.co.jp/intl/ja/products/apps-script/

# SpreadsheetでのGASの使い方

## 新規作成
まずは新規でSpreadsheetを作成します。

メニュータブのなかから、拡張機能を選び、AppsScriptを選びます。

AppsScriptの画面が開き、無題のプロジェクトと言う名前で、空の関数が作成されていると思います。

```javascript
function myFunction() {

}
```

では実際にスクリプトを書いてみましょう。

```javascript
function myFunction() {

Logger.log("hello world.")

}
```

保存し、実行ボタンを押してみましょう。

画面下部の実行ログに
```
情報 hello world.
```
と出力されていたら、成功です。

## Spreadsheetの値を取得する

このままでは何ら意味のない、単体の文字を出力するだけのスクリプトなので、 実際にSpreadsheetの値を取得してみます。

Spreadsheet側の <b>A1</b> セルに、<b>I'm spread sheet</b> と入力します。

次に、GAS側で次のようにスクリプトを作成します。

```javascript
function myFunction() {

// アクティブなSpreadsheetを取得
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

// アクティブなシートを取得
const activeSheet = spreadsheet.getActiveSheet()

// A1セルを取得
const range = activeSheet.getRange("A1")

// セルの値を取得
const val = range.getValue()

Logger.log(val)

}
```

これを実行してみましょう。
```
情報 I'm spread sheet
```
と出力されていたでしょうか?

Spreadsheet側のA1を変更すると、こちらの出力も連動して変更されます。

## Spreadsheetに値を書き込む

次に書き込みを行う方法を記載します。
スクリプトを以下のように変更します。

```javascript
function myFunction() {

// アクティブなSpreadsheetを取得
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

// アクティブなシートを取得
const activeSheet = spreadsheet.getActiveSheet()

// B1セルを取得
const range = activeSheet.getRange("B1")

// セルに値を設定
const val = range.setValue("I am Google App Script.")

}
```

実行してみましょう。今度は情報には特に何も表示されません。
ですが、Spreadsheet側を見てみると、
B1セルに、<b>I am Google App Script.</b>
という文言が追加されているはずです。

## マクロ化

Spreadsheetから取得と、Spreadsheetへの書き込み、2つのインターフェースを使用できました。
取得した値はJavascriptの要領で、様々に加工可能です。
可能した値をSpreadsheetへの書き込みを用いれば、好きなようにSpreadsheetを変更可能です。

これにより、Spreadsheetの値を用いて、Spreadsheetへ書き込むという事が可能になり、
値の直接書き換えという当初の目的を達することが出来ます。