大型マンション(10棟あるためGoogle Form数は10種類)の災害時の安否確認をGoogle Form(安否確認の棟室の複数回答のためチェックボックスを使用)で考えてます。各棟の安否確認回答をスプレッドシートに書き出し、10棟のスプレッドシートの統合と各スプレッドシートには安否確認が出来た棟室がCSV
で書き出しされるので、各棟のCSV数の集計と全棟のCSV数の集計を行いたいです。ご教授下さい。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/03/10 05:05
2022/03/11 00:36 編集
回答1件
0
ベストアンサー
(※注意:一部こちらで推定した情報をもとに説明を進めます。
また、下の説明中の図ではマンション数が3棟の場合の様式になっていますが、実際は10棟とみなしてください)
たとえばフォームが下図のようなものであると仮定し、
各マンションで確認済みのものにチェックを入れて送信しているとします。
そして、フォーム回答先のシートは、下図のようにB列に、チェックを入れた号室がカンマ区切りで自動転記されると仮定します。
(10個の各スプレッドシートすべて、B列に号室の回答データが入ると仮定します)
集計シートの作り方、スクリプトを使った集計
・IMPORTRANGE等の関数を使うやり方もありますが(後述)動作が非常に重い為、はじめにスクリプトを使ったやり方から説明します。
①まず、10個の各フォームの回答先シートのスプレッドシートIDとシート名を各々ひかえておきます。
②次に、新しいスプレッドシートを用意して、下図のような「集計」という名前のシートを作成します。
・B3セルに数式「=COUNTA(B5:B)」という数式を入力します。
・B3セルをコピーしてC3セルからK3セルまで貼り付けます。(それぞれの列の5行目以降のデータが入っているセルの個数が集計されます)
・J3セルに「=SUM(B3:K3)」という数式を入力します。
・B4セルからK4セルまで、10個のマンション名を手入力しておきます。
③:集計シートのメニューから「拡張機能」->「Apps Script」をクリックして、スクリプトエディタを開き、下記のコードを入力します。
(スクリプト中の「mansions」配列の中に、②でひかえた各回答先スプレッドシートID・シート名を記述します)
js
1function myFunction() { 2 // 集計シートの取得 3 const shuukei = SpreadsheetApp.getActive().getSheetByName('集計'); 4 5 // 前回の集計値をクリアする 6 shuukei.getRange("B5:K1000").clearContent(); 7 // マンション名の行を取得 8 const names = shuukei.getRange("B4:K4").getDisplayValues()[0]; 9 10 // マンション名と、それに対応する回答シートのリストを設定 11 // 注意:nameには、集計シートの4行目に入力したマンション名と1字1句同じ文字を入力すること。全角・半角・大文字・小文字も区別する。 12 const mansions = [ 13 { name: 'マンションA', sheetId: 'マンションAの回答シートのシートID', sheetName : '回答シートのシート名' }, 14 { name: 'マンションB', sheetId: 'マンションBの回答シートのシートID', sheetName : '回答シートのシート名' }, 15 { name: 'マンションC', sheetId: 'マンションCの回答シートのシートID', sheetName : '回答シートのシート名' }, 16 ]; // ※ここでは説明の都合上3行のみとなっているが実際はマンションの棟数(10行)だけ記述する。 17 18 // 各マンションごとにチェックが入っている号室の数を集計するループ 19 for (const mansion of mansions) { 20 // 回答先シートを開く 21 const ms = SpreadsheetApp.openById(mansion.sheetId).getSheetByName(mansion.sheetName); 22 23 const lastrow = ms.getLastRow(); 24 25 // フォームの回答が1件もない場合はスキップ。 26 if (lastrow < 2) continue; 27 28 // チェックが入っている号室を取得 29 const ans = ms.getRange(lastrow, 2, 1, 1).getDisplayValue(); //「2」=B列に回答が入っているという想定 30 const rooms = ans.split(', '); 31 32 // マンション名が集計シートの何列目にあるかを探す。 33 const pos = names.indexOf(mansion.name) + 2; // B列からはじまるので+2 34 35 // マンション名が見つからない場合はスキップ 36 if (pos === 1) continue; 37 38 // チェックの入った号室のデータを集計シートに書き込む。 39 const values = rooms.map(e => [e]); 40 const rows = values.length; 41 42 // チェックの入っている号室がゼロ個の場合はスキップ。 43 if (rows === 0) continue; 44 45 shuukei.getRange(5, pos, rows, 1).setValues(values); 46 } 47}
④ スクリプトを保存し、myFunctionを実行すると(スクリプト及びシートIDやシート名に誤りがなければ)下図のように
各フォーム(マンション)のチェックが入っている号室が並べて表示されるとともに、その集計結果が表示されます。
(うまく行かない場合はスクリプト中の「mansions」配列内に記述した各回答スプレッドシートのIDやシート名に誤りがある可能性や、
集計シートのマンション名とスクリプト中の「mansions」のnameに記述したマンション名が異なっている可能性があるので、再確認してください)
(実際は各部屋番号をチェックボックスとして持つ10個のフォームの作成、集計シートの作成、ひいては上記mansions配列の記述に相当する部分までほぼ全部自動化できますが、ここでは範囲外となるため割愛します)
関数を使ったやり方
※動作が非常に重いです。
1.上述の② と同じ要領で集計シートを作っておきます。
2.B5セルに、下記の数式を入力します。末尾の「", "」は「カンマ+半角スペース」であることに注意してください。
=TRANSPOSE(SPLIT(IMPORTRANGE("マンションAの回答シートのシートID", "マンションAの回答シートのシート名!B" & COUNTA(IMPORTRANGE("マンションAの回答シートのシートID","マンションAの回答シートのシート名!B1:B"))), ", "))
3.C5セル~K5セルは、B5セルに入力した数式と同じ式を、フォーム(マンション)ごとのスプレッドシートIDとシート名の部分だけ変えて入力します。
4.初回はセルの表示がエラー(「#REF!」)となるので、セルをクリックし、「アクセスを許可」ボタンを押します。
(初回のみ、10個のセル全部に対してこの操作を行う必要があります)
数式がエラーになる場合は、数式内のスプレッドシートIDやシート名が誤っていないか確認してください。
【回答シートにカウントを表示する方法】
各回答シートに、最新(最下行)の確認済み号室の個数を表示するには、
たとえば各回答シートのE1セルに下記の数式を入力します。
(※数式末尾の「", "」は「カンマ+半角スペース」です。注意してください。)
=COUNT((SPLIT((INDIRECT("B" & COUNTA((A1:A)))),", ")))
注意:下図のように、A列の途中に空白行があると最新の回答データで計算されません。このような場合は、空白の行を削除してください。
投稿2022/03/11 14:07
編集2022/03/20 00:30退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/03/11 21:56
2022/03/12 13:23
退会済みユーザー
2022/03/12 16:07 編集
2022/03/12 22:23
退会済みユーザー
2022/03/12 23:28 編集
2022/03/13 05:02
退会済みユーザー
2022/03/13 05:14
2022/03/13 05:36
2022/03/13 07:08
2022/03/13 08:09
退会済みユーザー
2022/03/13 10:21 編集
2022/03/13 13:45
退会済みユーザー
2022/03/13 14:51 編集
2022/03/13 22:28
退会済みユーザー
2022/03/13 22:55 編集
2022/03/14 00:23
退会済みユーザー
2022/03/14 01:00 編集
2022/03/14 04:32
退会済みユーザー
2022/03/14 09:03
2022/03/14 10:45
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。