
회계_시트

회원_시트

회원_시트

function onEdit(e) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = e.range.getSheet();
// 회계 시트만
if (sheet.getName() !== "회계") return;
const row = e.range.getRow();
if (row < 3) return;
const col = e.range.getColumn();
// B(이름), C(입금), D(지출)
if (![2, 3, 4].includes(col)) return;
/** -------------------
* 1️⃣ 잔액 자동 계산
------------------- */
const prevBalance = sheet.getRange(row - 1, 5).getValue() || 0;
const income = sheet.getRange(row, 3).getValue() || 0;
const expense = sheet.getRange(row, 4).getValue() || 0;
sheet.getRange(row, 5).setValue(prevBalance + income - expense);
/** -------------------
* 2️⃣ 회원명 정제 (회비_ 제거)
------------------- */
const memberRaw = sheet.getRange(row, 2).getValue();
if (!memberRaw) return;
const memberName = memberRaw.replace("회비_", "").trim();
/** -------------------
* 3️⃣ 회원별 누계 계산
------------------- */
const accountingData = sheet.getRange(2, 2, sheet.getLastRow() - 1, 2).getValues();
let total = 0;
accountingData.forEach(r => {
const name = (r[0] || "").replace("회비_", "").trim();
if (name === memberName) {
total += r[1] || 0;
}
});
/** -------------------
* 4️⃣ 회원 시트 E열에 반영
------------------- */
const memberSheet = ss.getSheetByName("회원");
const members = memberSheet.getRange(3, 1, memberSheet.getLastRow() - 2, 1).getValues();
for (let i = 0; i < members.length; i++) {
if ((members[i][0] || "").trim() === memberName) {
memberSheet.getRange(i + 3, 5).setValue(total);
break;
}
}
}
'AppSheet' 카테고리의 다른 글
| Gemini API무료 발급 가이드 (0) | 2026.05.29 |
|---|---|
| 명함관리 - 폰으로 찍어서 구글시트에 저장 (3) | 2025.12.24 |
| 구글 앱스크립트 11차시 - 통합 메뉴와 최종 마무리 (4) | 2025.12.21 |
| 구글 앱스크립트 10차시 - 실전 프로젝트와 배포 (1) | 2025.12.20 |
| 구글 앱스크립트 9차시 - 구글 드라이브와 외부 API (3) | 2025.12.20 |