スプレッドシートの始め方


GoogleSpreadSheetを使う機会があり、色々調べてみたことを備忘録として記します。
当記事はGoogleSpreadSheetを用いてマクロの基本的な使い方までを記します。

# GoogleSpreadSheetとは

Googleが提供しているエクセルのようなものです。
エクセルが使える人なら若干UIが違いますが、誰でも操作できると思います。

Excelと比較したメリットとしては

- クラウド上で保存されているため、どこからでも利用可能
- ドキュメントのアドレスを知っていれば誰でも編集可能（制限することも可能）
- リアルタイムでの複数人での更新が可能
- 履歴が保存されるためバックアップが容易にできる

などがあります。

一方、デメリットは

- クラウド上に保存されているため、インターネット環境がないとアクセスができない
- Excelよりも技術書や技術サイトが少ない
- サーバー上で動いているため多少のラグがある
- フォントの数や、罫線の種類等、機能が少ないものもある

などがあります。


# GoogleSpreadSheetの始め方
1. Googleのトップ画面の右上の資格が並んだアイコンをタップし、スプレッドシートを選択します。
![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598544816303_+2020-08-28+1.12.17.png)

2. 新しいスプレッドシートを作成から空白を選択します。
![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598545048672_+2020-08-28+1.16.39.png)

3. 新規スプレッドシートが作成されました。Excelのような画面ですね。
![GoogleSpreadSheet画面](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598545161506_+2020-08-28+1.18.20.png)



# Google Apps Script

GoogleSpreadSheetのマクロはGoogle Apps Script（以下、GAS）というJavaScriptをベースにしたプログラミング言語を用いています。


# Google Apps Scriptの基本的な使い方
## マクロの記録を用いたGAS
1. 適当に入力したスプレッドシートを用意します。
![A1~A5に1~5を入力](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598545657057_+2020-08-28+1.27.28.png)

2. ツール > マクロ > マクロを記録を選択
![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598545781066_+2020-08-28+1.28.17.png)

3. 以下のようなウィンドウが表示されます
![マクロ保存中はこのようなウィンドウが表示される。操作を実行するたびに記録した旨のメッセージも表示される。](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598546251385_+2020-08-28+1.32.10.png)

4. 記録したい操作を実行します。今回はA1~A5を範囲選択し、A10までドラッグしています。
![オートコレクト機能で6~10が入力される。](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598546107863_+2020-08-28+1.31.57.png)

5. 作業が終わったら保存ボタンを押下します。
![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598546436863_+2020-08-28+1.32.10.png)

6. マクロ名を入力し、保存ボタンを押下します。
![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598546492572_+2020-08-28+1.32.30.png)

7. ツール > マクロの配下に先ほど保存したマクロの「サンプル」があるので押下します。
![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598546667053_+2020-08-28+1.43.09.png)

8. 承認が必要と言われるので続行を押下します。
![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598546732520_+2020-08-28+1.44.51.png)

9. Googleアカウントを選択します。
![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598546796915_+2020-08-28+1.45.55.png)

10. 許可を押下します。これでマクロが使えるようになりました。
![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598546930323_+2020-08-28+1.47.34.png)

11. 挙動をみてみましょう。
![マクロ実行前](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598547067163_+2020-08-28+1.50.53.png)


先ほどの手順でサンプルマクロを実行してみます。

![マクロ実行後](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598547109730_+2020-08-28+1.51.41.png)


上手く行きましたね！


## マクロの編集

記録したのマクロのコードを直接見て編集する方法を解説します。

1. ツール > スクリプト エディタを押下します。
![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598547479940_+2020-08-28+1.57.22.png)

この時以下の画面が表示される場合、ログイン中のGoogleアカウントを確認してください。
デフォルトアカウント以外の場合以下の画面が表示されます。

![デフォルトアカウント以外で開くとこの画面が表示される。](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598547951675_+2020-08-28+2.05.42.png)

2. スクリプト エディタを開くと以下のような画面が表示されます。
![この画面でマクロを編集します。](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598548120762_+2020-08-28+2.07.56.png)

3. 6行目のA1:A10の部分をA1:A20に書き換えて、左上の保存ボタンを押下します。
    spreadsheet.getActiveRange().autoFill(spreadsheet.getRange('A1:A20'), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
![A20までオートコレクト機能を延長してます。](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598548388180_+2020-08-28+2.11.18.png)

4. 選択中のマクロ名が実行したいマクロ名になっていることを確認して▶︎ボタンを押下します。
![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598796360726_+2020-08-30+23.02.56.png)

5. スプレッドシートに戻ってマクロが実行されているかを確認します。
![A20までオートコレクトが実行されています。](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598548648424_+2020-08-28+2.16.28.png)


上手くできましたね！


## マクロのインポート

マクロを新たに作成した場合、スプレッドシート上で動作させるためにはインポートする必要があります。

1. ツール > マクロ > インポートを押下します。
![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598800605534_+2020-08-31+0.15.24.png)

2. インポートしたいマクロの「関数を追加」を押下します。
![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598800637815_+2020-08-31+0.17.08.png)

3. マクロ配下にmsgBoxのマクロが追加されていますね！
![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598800788988_+2020-08-31+0.18.59.png)



## マクロの管理

ツール > マクロ > マクロの管理からインポート済みのマクロを管理することができます。

![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598800977683_+2020-08-31+0.21.47.png)


マクロ名の更新やショートカットキーの設定、マクロの編集やアウトポートができます。

![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598801053963_+2020-08-31+0.23.38.png)



# GASで便利なコード

GASを使う上で便利なコードをまとめました。

## コメントアウト

1行のコメントアウトの場合は「//」を使用します。

    // この行はコメントアウト
    var spreadsheet = SpreadsheetApp.getActive();　// コードの途中からでもコメントアウトできます。

複数行のコメントアウトの場合、先頭に「/*」を、
最後尾に「*/」を使用します。

      /*
      aaa
      bbb
      ccc
      */


## ログの出力

以下のソースコードを実行後、スクリプトエディタの画面の表示 > ログからログを確認することができます。（ショートカットは⌘ + Enterキー）

    console.log("Hello GAS!!");
![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598801354734_+2020-08-31+0.27.56.png)

![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598801447839_+2020-08-31+0.30.39.png)



## メッセージボックス

以下のコードでメッセージボックスを出すことができます。
変数の確認に便利です！

    Browser.msgBox("Hello GAS!!");

▼出力結果

![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598796765320_+2020-08-30+23.11.10.png)



## 様々なメッセージボックス

メッセージボックスで「はい」や「いいえ」、「キャンセル」等のボタンを表示したい場合は以下の通りになります。

    var answer = Browser.msgBox([任意"ここにタイトル",] "ここに本文",ボタン種別);

第一引数はタイトルで任意項目となります。
第二引数は本文を入力します。
第三引数はボタン種別で、以下の項目からの選択となります。

| 第三引数                          | 表示ボタン              | 出力例                                                                                                                                                  |
| ----------------------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| Browser.Buttons.OK            | OK                 | ![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598799003869_+2020-08-30+23.49.53.png) |
| Browser.Buttons.OK_CANCEL     | OK<br>キャンセル        | ![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598798168838_+2020-08-30+23.36.00.png) |
| Browser.Buttons.YES_NO        | はい<br>いいえ          | ![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598798113314_+2020-08-30+23.35.04.png) |
| Browser.Buttons.YES_NO_CANCEL | はい<br>いいえ<br>キャンセル | ![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598798216352_+2020-08-30+23.36.46.png) |

また上記の変数answerに返却される戻り値は以下の通りになっています。

| 選択肢     | 戻り値    |
| ------- | ------ |
| はい      | yes    |
| いいえ     | no     |
| OK      | ok     |
| キャンセル   | cancel |
| 右上の×ボタン | cancel |



## インプットボックス

マクロ実行中に任意のテキストを入力したい場合はinputBoxを使います。

    var answer = Browser.inputBox([任意"ここにタイトル",] "ここに本文",ボタン種別);

ボタン種別は様々なメッセージボックスで示したボタン種別を入力しますが、基本的にはBrowser.Buttons.OK_CANCELで良いと思います。

![](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598799415068_+2020-08-30+23.56.44.png)


answerをmsgBoxで出力した結果

![ちゃんと取得できましたね！](https://paper-attachments.dropbox.com/s_7795C64C2C22AB226C87D236745B88945D45B87CA1189EC7D3C2834525AE531A_1598799548488_+2020-08-30+23.58.34.png)


また、戻り値は以下の通りとなっています。

| 選択肢     | 戻り値    |  
| ------- | ------ |  |
| はい      | 入力値    |  
| いいえ     | 入力値    |  
| OK      | 入力値    |  
| キャンセル   | cancel |  
| 右上の×ボタン | cancel |