ページを見て下さってありがとうございます。
教えて頂ける方がいらっしゃるとありがたいです。
・行いたいこと
google formsでアンケートを集計して、Google Apps Scriptでアンケート結果に基づく得点を自動で計算するというプログラムを書きたいです。
アンケートでは54問全ての問題で「0. いいえ」「1. どちらでもない」「2. はい」のいずれかを選んで頂くというものです。
先頭の文字だけに抽出して0, 1, 2のいずれかのデータをbのx番目のデータという形で数値化して因子(項目)別で足し算をして、回答者毎の新たなセルに書き出したいと考えています。
Google formsのスプレッドシードのスクリプトエディタの本文に記載したコードは以下の通りです(正確にはこの回答結果をアンケート回答者のメールに送信するため多少異なる部分がございます)。
1function sendMessage(e) { 2 3const [timeStamp, email, id, name, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54] = e.values; 4 5b1 = a1.slice(0,1) 6b2 = a2.slice(0,1) 7b3 = a3.slice(0,1) 8b4 = a4.slice(0,1) 9b5 = a5.slice(0,1) 10b6 = a6.slice(0,1) 11b7 = a7.slice(0,1) 12b8 = a8.slice(0,1) 13b9 = a9.slice(0,1) 14b10 = a10.slice(0,1) 15b11 = a11.slice(0,1) 16b12 = a12.slice(0,1) 17b13 = a13.slice(0,1) 18b14 = a14.slice(0,1) 19b15 = a15.slice(0,1) 20b16 = a16.slice(0,1) 21b17 = a17.slice(0,1) 22b18 = a18.slice(0,1) 23b19 = a19.slice(0,1) 24b20 = a20.slice(0,1) 25b21 = a21.slice(0,1) 26b22 = a22.slice(0,1) 27b23 = a23.slice(0,1) 28b24 = a24.slice(0,1) 29b25 = a25.slice(0,1) 30b26 = a26.slice(0,1) 31b27 = a27.slice(0,1) 32b28 = a28.slice(0,1) 33b29 = a29.slice(0,1) 34b30 = a30.slice(0,1) 35b31 = a31.slice(0,1) 36b32 = a32.slice(0,1) 37b33 = a33.slice(0,1) 38b34 = a34.slice(0,1) 39b35 = a35.slice(0,1) 40b36 = a36.slice(0,1) 41b37 = a37.slice(0,1) 42b38 = a38.slice(0,1) 43b39 = a39.slice(0,1) 44b40 = a40.slice(0,1) 45b41 = a41.slice(0,1) 46b42 = a42.slice(0,1) 47b43 = a43.slice(0,1) 48b44 = a44.slice(0,1) 49b45 = a45.slice(0,1) 50b46 = a46.slice(0,1) 51b47 = a47.slice(0,1) 52b48 = a48.slice(0,1) 53b49 = a49.slice(0,1) 54b50 = a50.slice(0,1) 55b51 = a51.slice(0,1) 56b52 = a52.slice(0,1) 57b53 = a53.slice(0,1) 58b54 = a54.slice(0,1) 59 60range = e.range; 61p1 = range.getRow(); 62sheet = SpreadsheetApp.getActiveSheet() 63sheet.getRange(p1, 60).setValue(parseInt(b1) + parseInt(b7)+ parseInt(b13)+ parseInt(b19)+ parseInt(b25)+ parseInt(b31)+ parseInt(b37)+ parseInt(b43)+ parseInt(b49)).getValue(); 64sheet.getRange(p1, 61).setValue(parseInt(b2) + parseInt(b8)+ parseInt(b14)+ parseInt(b20)+ parseInt(b26)+ parseInt(b32)+ parseInt(b38)+ parseInt(b44)+ parseInt(b50)).getValue(); 65sheet.getRange(p1, 62).setValue(parseInt(b3) + parseInt(b9)+ parseInt(b15)+ parseInt(b21)+ parseInt(b27)+ parseInt(b33)+ parseInt(b39)+ parseInt(b45)+ parseInt(b51)).getValue(); 66sheet.getRange(p1, 63).setValue(parseInt(b4) + parseInt(b10)+ parseInt(b16)+ parseInt(b22)+ parseInt(b28)+ parseInt(b34)+ parseInt(b40)+ parseInt(b46)+ parseInt(b52)).getValue(); 67sheet.getRange(p1, 64).setValue(parseInt(b5) + parseInt(b11)+ parseInt(b17)+ parseInt(b23)+ parseInt(b29)+ parseInt(b35)+ parseInt(b41)+ parseInt(b47)+ parseInt(b53)).getValue(); 68sheet.getRange(p1, 65).setValue(parseInt(b6) + parseInt(b12)+ parseInt(b18)+ parseInt(b24)+ parseInt(b30)+ parseInt(b36)+ parseInt(b42)+ parseInt(b48)+ parseInt(b54)).getValue(); 69} 70
問題が発生する条件
トリガーを設定して、実際にアンケートを入力してみると以下のようなエラーが出て処理が出来なくなります。
TypeError: Cannot read property 'slice' of undefined
at sendMessage(コード:58:17)
58番目のコードは
b54 = a54.slice(0,1)
です。
試してみたこと
質問12個の同様のアンケートでは既に動くプログラムが作成できています。
今回、数を増やしたらエラーが出たため、コードの数を減らしうて行きました。
この結果、代入を50個(b50 = a50.slice(0,1)まで)にするとデータを読み込むことを確認しました。
この結果から、代入の最大数は50個なのかと思い、for文で処理を試みましたが、今度はfor文章の書き方が分からないという状況です。
for (var i = 1; i < 54; i++) {"b"+[i] = "a"+[i]+".slice(0,1)"}
どうすれば改善できるのか、教えて頂くことは出来ませんでしょうか。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー