ボランティア参加者の記録をGASで簡単にできるようにした

## 概要
　私のサークルではボランティアの参加者の様子や行った支援を活動毎に記録しています。記録はGoogleスプレッドシートに各自で行っていますが、スマートフォンからグGoogleスプレッドシートを編集するのは困難なものです。そこで、GoogleフォームとGoogleスプレッドシートを連携させGoogleフォームに回答するだけで参加者の記録がスプレッドーシート内にシートごとに分けて追記するシステムを作成しました。
　文章後半では紹介したスプレッドシートと、フォームを編集し自分が使いやすい項目にする方法について説明します。


## 機能
1.Googleフォームで当日の記録を回答することでスプレッドシートに記録することができる。
2.回答を参加者ごとに分けてシートに追加する。
3.参加者名がシートになければテンプレートを複製して新しい参加者のシートを作成する。
# 作成

#### ①記録テンプレートの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241621/ba810fdc-28b1-ae88-630a-985441a48aee.png)
上記のようなシートをテンプレートとして作成しました。

#### ②回答フォームの作成
![screencapture-docs-google-forms-d-e-1FAIpQLSc3SRbHZ28MLo0uyCvtWx8-x-fSkJn8NQoCFu57jfBqflEzBA-viewform-2022-04-02-11_24_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241621/6e48b276-ea75-dc2c-85e8-67a70ec8d005.png)
上記のように回答フォームを作成しました。

#### ③転記スクリプトの作成
```javascript
//フォームに回答が来たときに動くスクリプト
function setLastChildInformation(){
  //シート全体を取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  //シート全体をオブジェクトで取得
  var FullSheets = sheet.getSheets();
  //テンプレを取得
  var copySheet = sheet.getSheetByName("テンプレ (変更後) ");
  //回答データを取得
  var answerSheet = sheet.getSheetByName('フォームの回答1');
  //最終行の行数,最終列の列数を取得
  var lastRow = answerSheet.getLastRow();
  var lastColumn = answerSheet.getLastColumn();
  //回答されたデータを取得
  var childInformation = answerSheet.getSheetValues(lastRow,1,lastRow,lastColumn);

  //すべてのシートに対して探索
  for(i = 0;i < FullSheets.length;i++){
    var targetSheet = FullSheets[i]; 
    var sheetName = targetSheet.getSheetName();

    //シートに名前を追加
    if(sheetName == childInformation[0][1]){
      targetSheet.appendRow(childInformation[0].slice(2,10));
      findChildName = true;
      break;
    }
    //シートがない場合に新しい人を追加
    if(i == FullSheets.length-1){
      let newSheet = copySheet.copyTo(sheet);
      newSheet.setName(childInformation[0][1]);
      newSheet.getRange("A1").setValue(childInformation[0][1]);
      newSheet.getRange("C2").setValue(childInformation[0][3]);
      newSheet.appendRow(childInformation[0].slice(2,10));
      FullSheets.push(newSheet);
      break;
    }
  }
}
```
### 動作確認
<iframe width="560" height="315" src="https://www.youtube.com/embed/CNm_w85qpcc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

### コピーして利用する方法
## ①スプレッドシートをコピーする
　以下にアクセスしてご自身のgoogleドライブに共有用のスプレッドシートをダウンロードしてください。
　　　[ここからコピーを作成](https://docs.google.com/spreadsheets/d/17O95jm7uFDFuau3X1ekTA3mwt4MuLFQ0cGcUxAihdJk/copy)
　※必要があればここでマイドライブに作成したファイルを移動してください。
## ②トリガーを設定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241621/da3569c0-6997-9ec0-d7cc-a70d2a09e379.png)
拡張機能＞Apps Scriptを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241621/8d72eb03-3959-5b3d-3388-4d81dc050f1c.png)
左記メニューからトリガーを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241621/4b3774a5-ca6d-903b-180b-9c1fb81e7343.png)
<font color="#1e90ff">**新しいトリガーを作成します**</font>をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241621/a5ec50e7-6b9a-2ea9-a5ea-3f6eae8e71f1.png)
イベントの種類を選択をフォーム送信時に変更して保存
**※警告が表示された際は、詳細設定を押して先に進んでください**

***
以上でフォームの制作は完了です。
お読みいただきありがとうございました。