구글 시트 업무 목록에서 마감이 지났는데 안 끝난 일만 골라, 매일 아침 담당자마다 메일 한 통으로 보내요. 앱스 스크립트(Google Apps Script, 시트 안에 넣는 작은 프로그램) 코드 하나와 트리거(정해진 시간에 저절로 실행하는 예약) 하나면 돼요.
이런 분께
팀 업무 목록을 시트로 관리하면서, 마감 지난 일을 매번 눈으로 찾아 다시 알리는 사무 담당자나 팀장.
끝나면 이렇게 됩니다
매일 아침 9~10시 사이에 담당자별로 이런 메일이 가요. 아래는 예시 시트로 이 코드를 실제로 돌려서 나온 메일 본문이에요(2026년 11월 3일 실행).
받는 사람: kim@example.com
제목: [업무 알림] 마감 지난 업무 2건
마감일이 지났는데 아직 완료로 바뀌지 않은 업무예요.
- 거래처 견적서 회신 (마감 10/31, 3일 지남)
- 11월 출장비 정산 (마감 11/2, 1일 지남)
끝났으면 시트의 상태 칸을 완료로 바꿔 주세요.
「완료」인 줄과 마감 전인 줄은 빠져요.
준비물
- 구글 계정(무료 지메일 계정도 돼요)
- 구글 시트 탭 이름 「업무」, 첫 줄 제목: A 업무, B 담당자 이메일, C 마감일(날짜 형식), D 상태
- 하루 메일 한도: 무료 계정은 받는 사람 하루 100명, 구글 워크스페이스 계정은 1,500명(2026년 11월 기준 공식 한도 표).
따라 하기
- 구글 시트를 열고 위쪽 메뉴에서 「확장 프로그램」 → 「Apps Script」를 눌러요.
- 편집기에 원래 있던
function myFunction() { }을 모두 지우고, 아래 「복사해서 쓰는 코드」를 통째로 붙여 넣어요. 「저장」을 눌러요. - 위쪽 함수 선택 칸이
sendOverdueReminders인지 보고 「실행」을 눌러요. 처음 한 번은 「권한 검토」 창이 떠요. 내 계정을 고르고, "확인되지 않은 앱" 경고가 나오면 「고급」 → 「(프로젝트 이름)(으)로 이동」 → 「허용」을 눌러요. 내가 만든 코드라서 나오는 경고예요. - 시험 삼아 담당자 칸에 내 메일 주소를 넣고 마감일을 어제로 적은 줄을 하나 만든 뒤 다시 「실행」을 눌러요. 내 메일함에 알림이 오면 성공이에요.
- 왼쪽 막대의 알람 시계 모양 「트리거」를 누르고, 오른쪽 아래 「트리거 추가」를 눌러요.
- 실행할 함수는
sendOverdueReminders, 이벤트 소스는 「시간 기반」, 트리거 유형은 「일 단위 타이머」, 시간은 「오전 9시~10시」로 고르고 「저장」을 눌러요. 이제 매일 그 시간대에 저절로 돌아요.
복사해서 쓰는 코드
function sendOverdueReminders() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('업무');
const rows = sheet.getDataRange().getValues();
const today = new Date();
today.setHours(0, 0, 0, 0);
const tz = Session.getScriptTimeZone();
const byPerson = {};
for (let i = 1; i < rows.length; i++) {
const [task, email, due, status] = rows[i];
if (!task || !email || !(due instanceof Date)) continue;
if (String(status).trim() === '완료') continue;
if (due >= today) continue;
const days = Math.round((today - due) / 86400000);
const line = '- ' + task + ' (마감 ' + Utilities.formatDate(due, tz, 'M/d') + ', ' + days + '일 지남)';
(byPerson[email] = byPerson[email] || []).push(line);
}
for (const email in byPerson) {
const list = byPerson[email];
MailApp.sendEmail(
email,
'[업무 알림] 마감 지난 업무 ' + list.length + '건',
'마감일이 지났는데 아직 완료로 바뀌지 않은 업무예요.\n\n' +
list.join('\n') +
'\n\n끝났으면 시트의 상태 칸을 완료로 바꿔 주세요.\n' + ss.getUrl()
);
}
}
