これは Google Workspace 標準機能 Advent Calendar 2024 シリーズ2 の24日目の記事です。
概要
アンケート調査をするときに、Google フォームを使うと簡単に素早くアンケートフォームが構築できますが、各項目をクロス集計したり、スコアに応じて画面を出しわけるには一工夫必要です。
-
DVS
(食品摂取の多様性評価)とMNA®
(簡易栄養状態評価表)をアンケート調査し、個人の特性を求めたいアンケートを作成します -
DVS
とMNA®
について、それぞれに含まれる複数の項目をアンケートし、それぞれの合計スコア求める - それぞれの合計スコアに応じてA~Bの3段階で評価し、低栄養や食事の多様性に関して、回答者にアドバイスを行う
私は予防医療や栄養学、看護学の専門家ではありません。そのためDVS
やMNA®
に関する誤った解釈が含まれている可能性があります。アンケートフォームの省力化をテーマにしています。
完成イメージ
どうやって作るのか?
アンケートフォームの作成(Google フォーム
)
今回は、各質問の名義尺度からスコアを算出するので、各質問をダミー変数化して質問を作成します。
- まず
DVS
とMNA®
の質問を記入するためのアンケートフォームをGoogle フォーム
で作成する - 名義尺度のまま回答してもらっても良いが、処理の簡単のため回答項目は『スコア値』としておく
アンケート結果をためておく(Google スプレッドシート
)
Google フォーム
で回答した結果を、後で集計するためにGoogle スプレッドシート
に自動保存させる。そのための設定は、Google フォーム
で行う。
設定したら、『スプレッドシートで表示』リンクからGoogle スプレッドシート
に移動する。
すると下記のようにアンケート結果が保存される。
アンケートに応じてスコアを計算するアプリ(Google Apps Script
)
アンケート結果の最新の1件に応じて、スコアを計算して表示する。
今回は簡単のため、①タブレットを使った対面式のアンケート、②1人ずつの回答 を想定している。
- 複数端末で同時にアンケート回答する場合は、排他制御を検討すること
- オンラインでの回答など、不正なパラメータが混入するケースが想定されるのであればバリデーションチェックを入れること
function getDVSMessage(dvsRank) {
if (dvsRank === "A") {
return "食品接種状況はとても良いです。毎日7点以上をこれから続けましょう。";
} else if (dvsRank === "B") {
return "食品接種状況が少し心配です。食べやすい食品をプラスして栄養バランスを向上させましょう。";
} else if (dvsRank === "C") {
return "食品接種状況が心配です。毎日の食生活に3ポイントプラスするように心がけましょう。";
}
// throw new Error("DVS Not Found.");
}
function doGet() {
// スプレッドシートとシートの取得
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const lastRow = sheet.getLastRow(); // 最新の行
const headers = sheet.getDataRange().getValues()[0]; // ヘッダー
const row = sheet.getRange(lastRow, 1, 1, headers.length).getValues()[0]; // 最新の行データ
// MNA スコア (列 2~7 の範囲を仮定)
const mnaScores = row.slice(1, 7);
const dvsScores = row.slice(7, 17);
// スコア合計の計算
const mnaTotal = mnaScores.reduce((sum, score) => sum + (parseInt(score, 10) || 0), 0);
const dvsTotal = dvsScores.reduce((sum, score) => sum + (parseInt(score, 10) || 0), 0);
// MNA ランク判定
let mnaRank = "C";
if (mnaTotal >= 12) mnaRank = "A";
else if (mnaTotal >= 8) mnaRank = "B";
// DVS ランク判定
let dvsRank = "C";
if (dvsTotal >= 7) dvsRank = "A";
else if (dvsTotal >= 4) dvsRank = "B";
// メッセージ作成
let mnaMessage = "";
if (mnaRank === "A") {
mnaMessage = "栄養状態は良好です。";
} else if (mnaRank === "B") {
mnaMessage = "低栄養の恐れがあります。";
} else if (mnaRank === "C") {
mnaMessage = "低栄養状態です。";
}
const dvsMessage = getDVSMessage(dvsRank);
// HTML 出力 (TailwindCSS 適用)
return HtmlService.createHtmlOutput(`
<html>
<head>
<title>結果</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100 flex flex-col items-center justify-center min-h-screen">
<div class="bg-white shadow-md rounded-lg p-8 max-w-md text-center">
<h1 class="text-2xl font-bold text-green-500 mb-4">結果</h1>
<ul class="list-disc text-left text-gray-700 space-y-2">
<li><span class="font-semibold">MNA:<span class="text-red-600">${mnaTotal}</span></span> ${mnaMessage}</li>
<li><span class="font-semibold">DVS:<span class="text-red-600">${dvsTotal}</span></span> ${dvsMessage}</li>
</ul>
</div>
</body>
</html>
`).setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
Google Apps Script
でコードを作成したら、『ウェブアプリ』としてデプロイする。
デプロイ > ⚙️ > ウェブアプリ
『ウェブアプリのURL』をコピーしておく(次の作業で必要)。
アンケートに応じてスコアを表示(Google フォーム
の設定)
Google フォーム
で回答したデータをGoogle スプレッドシート
に自動保存させるのは設定だけで可能だが、Google フォーム
ではアンケート回答後のページをカスタマイズできない(たぶん)。そのため下記からアンケート回答後に表示されるメッセージへ、先ほどの『ウェブアプリのURL』を記載しておく。
Google フォーム
の設定 > 表示設定
感想
お手軽にアンケートフォーム結果の集計&結果に応じたメッセージの表示ができました。
Google Workspace、便利ですね!😇