Google Formを使って、QOL尺度での評価とフィードバックを自動化

過去記事の応用として
[Google Formを使って、テストと受講証明pdfを自動発行](https://qiita.com/youkiti/items/1c4e993bb752749b1832)
アンケートを集計して、その結果を回答者にフィードバックする仕組みを作りました。

#準備するもの
回答用のGoogleアカウント(個人のメアドを使わない)

#フォームを作成
今回は、これを例に作ります。
CiTAS （化学療法に伴う味覚変化評価スケール） 日本語版 version β
http://plaza.umin.ac.jp/~citas/CiTAS/CiTAS.html

Googleフォームから、質問内容を反映させたフォームを作成します。

#メール回答のテンプレートドキュメントを作成
こんな風に作成しました。
作ったGoogle docファイルのIDをコピペしておきます。

>{Value1}さま  
>ご回答ありがとうございます。
>化学療法に伴う味覚変化評価スケールの集計結果をお送りします。
>最高得点の5点に近ければ症状が強く，最低点の0点に近ければ症状が軽いと判断します。
>
>【基本味の低下】
>{Value2} 点
>【不快症状】
>{Value3} 点
>【自発性異常味覚・錯味】
>{Value4} 点
>【全般的味覚変化】
>{Value5} 点

>症状ごとの詳しい対処法について
>http://plaza.umin.ac.jp/~citas/CiTAS/CiTAS.html

#GAS

```CITAS.gs
/*最初に文字データを数字に変換する関数を定義します*/
function henkan(n){
  var result;
  if (n == 'ふつうに感じる'){
    result = 1;
  }else if (n == '少し感じにくい'){
    result = 2;
  }else if (n == '多少感じにくい'){
    result = 3;
  }else if (n == 'かなり感じにくい'){
    result = 4;
  }else if (n == '全く味がしない'){
    result = 5;
  }else if (n == 'いいえ'){
    result = 1;
  }else if (n == 'すこし'){
    result = 2;
  }else if (n == 'まあまあ'){
    result = 3; 
  }else if (n == 'かなり'){
    result = 4;  
  }else if (n == 'とても'){
    result = 5;   
  }
  return result;
}

/*ここからフォームが投稿されたときに動くスクリプトです*/
function onFormSubmit() {
  /*データ取得*/
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet       = spreadsheet.getSheetByName('フォームの回答 1');
const values      = spreadsheet.getDataRange().getDisplayValues();

console.log(values.length);

//作成済となっていない行を取得する。

for(let i = 1; i < values.length; i++){
  if(values[i][21]!=='作成済'){     
      
  const email      = values[i][1]; //メアド　
  const name       = values[i][2]; //名前　

  const Q1         = henkan(values[i][3]); //ここから数値化した各質問の答え
  const Q2         = henkan(values[i][4]); 
  const Q3         = henkan(values[i][5]); 
  const Q4         = henkan(values[i][6]); 
  const Q5         = henkan(values[i][7]); 
  const Q6         = henkan(values[i][8]); 
  const Q7         = henkan(values[i][9]); 
  const Q8         = henkan(values[i][10]); 
  const Q9         = henkan(values[i][11]); 
  const Q10        = henkan(values[i][12]); 
  const Q11        = henkan(values[i][13]); 
  const Q12        = henkan(values[i][14]); 
  const Q13        = henkan(values[i][15]); 
  const Q14        = henkan(values[i][16]); 
  const Q15        = henkan(values[i][17]); 
  const Q16        = henkan(values[i][18]); 
  const Q17        = henkan(values[i][19]); 
  const Q18        = henkan(values[i][20]);

//集計
  const kiso =  (Q2+Q3+Q4+Q5+Q6)/5;
  const fukai = (Q13+Q14+Q15+Q16+Q17+Q18)/6;
  const sakumi = (Q10+Q11+Q12)/3;
  const zenpan = (Q1+Q7+Q8+Q9)/4;
          
//作成済のフラグ      
  const rangeNumber = i + 1;
  sheet.getRange(rangeNumber, 22) //上だと"21"だがここでは"22"で同じセルを指定していることになる！！！
    .clearContent()
    .setValue('作成済');  
    
//味のスコアをスプレッドシートに入力
//もとのフォームにはない変数をスプレッドシートに列を加える形で新規作成している

  sheet.getRange(rangeNumber, 23) 
    .clearContent()
    .setValue(kiso);  

  sheet.getRange(rangeNumber, 24) 
    .clearContent()
    .setValue(fukai);  

  sheet.getRange(rangeNumber, 25) 
    .clearContent()
    .setValue(sakumi);  

  sheet.getRange(rangeNumber, 26) 
    .clearContent()
    .setValue(zenpan);  
    
//取得したメアドにスコアとコメントを送る    
        
  const sourceDocument   = DocumentApp.openById('テンプレートドキュメントのID');
  
  const docText = sourceDocument.getBody().getText();

  const body = docText
      .replace('{Value1}',name)
      .replace('{Value2}',kiso)
      .replace('{Value3}',fukai)
      .replace('{Value4}',sakumi)
      .replace('{Value5}',zenpan);   
  const subject = '化学療法に伴う味覚変化評価スケール'  
  GmailApp.sendEmail(email,subject,body);
  
  }//if
}//for
}//end    
```

#最後に
時計ボタンを押して、トリガー設定を忘れないように。