Skip to content

Instantly share code, notes, and snippets.

@tetsutalow
Created December 15, 2018 04:00
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save tetsutalow/b25e09ad7c7ad62167a99d2d4b55177e to your computer and use it in GitHub Desktop.
投票集計のためのGoogle Apps Script(Ver.2)
function codecheck(e) {
var range = e.range; // 書き換えられた部分
var votesheet = e.source.getActiveSheet(); // 書き換え部分を含むシート=集計用シート
var totalsheet = e.source.getSheetByName('集計結果'); // 投票の集計
if (totalsheet == null) {
totalsheet = e.source.insertSheet('集計結果'); // なければ作る
var titlerange = totalsheet.getRange("A1:B1");
titlerange.setValues([["項目", "票数"]]); // タイトル行を設定
}
var codesheet = SpreadsheetApp.openById('1mppQxjXL6MUqmDuTONBe8nTNIEWdMXeup4wVHE87_ZI').getSheetByName('codes'); // 投票用コード一覧 A列に投票用コード C列は消費済み印
var key=e.namedValues['投票用コードを入力してください']; // 入力された投票用コード
var hit_row = get_row(key, 'A', codesheet); // 投票用コード一覧から入力されたコードが見つかれば行番号 見つからなければ0
var voteerror_range = votesheet.getRange(range.getRow(),4); //書き換えられた部分の4列目=D列のセルを指定
if (hit_row == 0) { // 投票用コード一覧に見つからず
voteerror_range.setValue('E'); // コード不正を記録
} else { // 投票用コードが見つかった
var code_range = codesheet.getRange(hit_row, 3); // 該当行の3列目=C列のセルを指定
voteerror_range.setValue(code_range.getValue()); // そのセルの値を投票集計用シートの該当行にコピー。もし使用済みならXが、使用前なら空白がコピーされる。
if(code_range.getValue() != 'X') { // 無効票でなければ
var item = e.namedValues['きのこか?たけのこか?']; //集計する項目
var itemrow = get_row(item, 'A', totalsheet);
if (itemrow == 0) { // 新規に追加
var add_row = totalsheet.getLastRow() + 1;
var add_range = totalsheet.getRange("A"+add_row+":B"+add_row);
add_range.setValues([[item, 1]]);
} else { // 票数を1つ足す
var update_range = totalsheet.getRange("B"+itemrow);
update_range.setValue(update_range.getValue()+1);
}
}
code_range.setValue('X'); // 当該投票用コードに使用済み印をつける
}
}
// 以下の関数は http://www.pre-practice.net/2018/01/blog-post_21.html から拝借
function get_row(key, col, sh){
var array = get_array(sh, col);
for (var i = 0; i < array.length; i++) {
if(key == array[i]) {
return(i+1);
}
}
return 0;
}
function get_array(sh, col) {
var last_row = sh.getLastRow();
var range = sh.getRange(col + "1:" + col + last_row);
var values = range.getValues();
var array = [];
for(var i = 0; i < values.length; i++) {
array.push(values[i][0]);
}
return array;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment