Skip to content

Instantly share code, notes, and snippets.

@libnumafly
Last active February 1, 2026 11:48
Show Gist options
  • Select an option

  • Save libnumafly/7f94991bceab31d68abf89907d7effab to your computer and use it in GitHub Desktop.

Select an option

Save libnumafly/7f94991bceab31d68abf89907d7effab to your computer and use it in GitHub Desktop.
// SPDX-License-Identifier: WTFPL
function updateCensusStatusFromEmail() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// Gmailを検索
var threads = GmailApp.search('from:(no-reply@e-kokuseikanri.go.jp) is:unread', 0, 10); // とりあえず最大10スレッド取得
for (var i = 0; i < threads.length; i++) {
var messages = threads[i].getMessages();
for (var j = 0; j < messages.length; j++) {
var message = messages[j];
var body = message.getPlainBody(); // プレーンテキストで本文取得
// 本文から調査区番号を抽出
var censusAreaMatch = body.match(/調(\S+)/);
if (!censusAreaMatch) continue;
var district = censusAreaMatch[1];
// 対応するシートを取得(シート名 = 調査区番号)
var sheet = spreadsheet.getSheetByName(district);
if (!sheet) {
Logger.log('シートが見つかりません: ' + district);
continue;
}
// 本文からネット世帯番号を抽出
var netAnsweredMatch = body.match(/\s*([\d,]+|)/);
var netAnswered = (netAnsweredMatch && netAnsweredMatch[1] !== 'なし') ? netAnsweredMatch[1].split(',').map(Number) : [];
// 本文から郵送世帯番号を抽出
var mailAnsweredMatch = body.match(/\s*([\d,]+|)/);
var mailAnswered = (mailAnsweredMatch && mailAnsweredMatch[1] !== 'なし') ? mailAnsweredMatch[1].split(',').map(Number) : [];
// シートのデータを取得(A列:世帯番号, D列:回答状態)
var data = sheet.getDataRange().getValues();
for (var k = 1; k < data.length; k++) { // k = 1 : ヘッダー行をスキップ
var householdNum = data[k][0]; // A列: 世帯番号
// ネットの場合
if (netAnswered.includes(householdNum)) {
sheet.getRange(k + 1, 4).setValue('ネット'); // D列に"ネット"入力
}
// 郵送の場合
else if (mailAnswered.includes(householdNum)) {
sheet.getRange(k + 1, 4).setValue('郵送'); // D列に"郵送"入力
}
}
// 処理済みメールを既読またはラベル付け(任意)
message.markRead();
}
}
}
@libnumafly
Copy link
Author

2025年(令和7年)に日本国内で行われた国勢調査で、調査期間中に調査員向けに毎朝配信される「回答済世帯通知」メールから世帯番号を抽出しシートに反映するために作成したスクリプトです。(調査期間中、国勢調査員として活動していました)

「回答済世帯通知」メールがGmailに配信され、Google SpreadsheetのApps Script機能を使ってこのスクリプトを動作させることが前提条件となっています。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment