幹事さんの味方!STEP 4 : 出欠&集金管理表

STEP 4 : 出欠&集金管理プロ

データの取り扱いに関するご注意
・入力内容はブラウザに自動保存されますが、URLをコピーしても他の方と内容は共有されません。
・詳細を共有したい場合は、下部の「状況をコピー」ボタンを使用してください。
便利な使い方
Excel連携:コピーした内容はそのままExcel等に貼り付け可能です。
名簿印刷:「名簿を印刷する」で清書版の名簿が印刷可能です。
並び替え:項目名をクリックして並び替えができます。
参加予定 0
来場済み 0
男性(支払済) 0
女性(支払済) 0
現在の集金合計 0円
事前準備:お釣りの枚数目安
(つり銭準備金:合計 0円)
男性会費:
女性会費:

表は左右にスライドして確認できます

No. お名前 フリガナ 性別 来場 支払 メモ 削除
受付が済んだらいよいよ本番 STEP 5:司会進行台本ツール 進む →
`); pwin.document.close(); } document.addEventListener('click', function(e) { const t = e.target.closest('th') || e.target; if (t.classList.contains('kpm-js-toggle')) { const idx = t.dataset.idx; members[idx][t.dataset.key] = !members[idx][t.dataset.key]; save(); render(); } else if (t.classList.contains('kpm-js-sex')) { const idx = t.dataset.idx; const cur = members[idx].sex || "n"; if(cur==="n") members[idx].sex="m"; else if(cur==="m") members[idx].sex="f"; else members[idx].sex="n"; save(); render(); } else if (t.classList.contains('kpm-js-del')) { members.splice(t.dataset.idx, 1); save(); render(); } else if (t.id === 'kpm-add-row-btn') { members.push({ name: "", kana: "", sex: "m", arr: false, pay: false, memo: "" }); save(); render(); } else if (t.id === 'kpm-print-trigger') executePrint(); else if (t.id === 'kpm-copy-trigger') { let txt = "【受付報告】\n来場:" + $('kpm-arr-num').innerText + "/" + $('kpm-total-num').innerText + "名\n集金合計:" + $('kpm-total-money-display').innerText + "\n\n【参加者一覧】\nNo\t名前\tカナ\t性別\t来場\t支払\tメモ\n"; members.forEach((m, idx) => { if (m.name && m.name.trim() !== "") { const s = m.sex === 'm' ? '男' : (m.sex === 'f' ? '女' : '他'); txt += `${idx+1}\t${m.name}\t${m.kana || '-'}\t${s}\t${m.arr?'✓':''}\t${m.pay?'✓':''}\t${m.memo || '-'}\n`; }}); const dummy = document.createElement('textarea'); document.body.appendChild(dummy); dummy.value = txt; document.body.appendChild(dummy); dummy.select(); document.execCommand('copy'); document.body.removeChild(dummy); const toast = $('kpm-toast-message'); toast.style.display = 'block'; setTimeout(() => toast.style.display = 'none', 2000); } else if (t.id === 'kpm-reset-trigger') { if(confirm('全てクリアしますか?')) { localStorage.removeItem(KPM_STORAGE_KEY); location.reload(); } } else if (t.classList.contains('kpm-sort-header')) { const key = t.dataset.sort; if (sortKey === key) sortAsc = !sortAsc; else { sortKey = key; sortAsc = true; } members.sort((a, b) => { let vA = a[key], vB = b[key]; if (typeof vA === 'boolean') { vA = vA ? 1 : 0; vB = vB ? 1 : 0; } const res = (vA || "").toString().localeCompare((vB || "").toString(), 'ja'); return sortAsc ? res : -res; }); render(); } }); document.addEventListener('input', function(e) { const t = e.target; if (t.classList.contains('kpm-js-input')) { members[t.dataset.idx][t.dataset.key] = t.value; save(); } else if (t.id === 'kpm-input-m' || t.id === 'kpm-input-f') save(); }); const cached = localStorage.getItem(KPM_STORAGE_KEY); if (cached) { const d = JSON.parse(cached); members = d.m || []; $('kpm-input-m').value = d.fM || 5000; $('kpm-input-f').value = d.fF || 4000; } else { members = [{ name: "田中 太郎", kana: "タナカ タロウ", sex: "m", arr: false, pay: false, memo: "" }, { name: "山田 花子", kana: "ヤマダ ハナコ", sex: "f", arr: false, pay: false, memo: "" }]; } render(); })();