Created
December 15, 2018 04:00
Star
You must be signed in to star a gist
投票集計のためのGoogle Apps Script(Ver.2)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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