1. AI로 기획서 보고서 완전 정복하기
•
일자 : 4/15(수) , 11/11(수)
•
시간 : 6시간
•
기획서/보고서 작성의 기본 프레임워크를 학습하고, AI 도구를 활용하여 실무에서 바로 활용 가능한 보고서를 직접 작성하는 실습 중심 과정입니다.
커리큘럼
차시 | 진행내용 | 활용 도구 |
Session1.
기획의 기본기 습득하기 | • 비즈니스 문서 작성을 위한 준비 운동: 논리의 출발은 용어부터 정리하라!
- 기획, 목적, 목표, 문제, 문제점, 의견, 사실 등
• 보고서 기획의 기본 프로세스 이해: 클라이언트 블록, 컨셉 블록, 플래너 블록
• 보고서 제목 작성법의 기본 스킬: 기획의 방향은 제목에서 결정된다.
• 보고서 기획을 위해 알아야 할 기본 구조의 이해
- 보고서의 기본 구조 '클라이언트 블록'의 개념과 예시 학습
- 클라이언트 블록의 필수 항목:
현상 분석, 원인 분석, 배경 분석, 목표 설정, 목적 검증, 기대효과, 기획 과제
- 개인별 클라이언트 블록 작성 실습 | 실습PPT
또는 워크시트(지류) |
Session2.
기획을 구체화하기 w.AI | [실습] 공통 주제로 AI 보고서 초안 작성주제: 병원 관련 실무 기획
•AI 기획 봇 소개 (커스텀 AI 도구 시연)
- 기획 봇의 단계별 질문을 통한 체계적 기획
[실습] 기획 봇으로 새로운 기획서 작성봇의 가이드에 따라 단계별 기획 완성 | AI기획봇 활용 (업데이트 예정)
예) |
Session3.
Gemini로 작업 효율화하기 | Gemini Canvas, NotebookLM, Google AI Studio |
실습 프롬프트 예시
지금까지 분석한 내용을 기반으로 '2025 이서중학교 수학여행 만족도 조사 결과 보고서'를 작성해줘.
[보고서 독자]
교감·교장 선생님 (내부 보고용)
[보고서 구조]
1. 조사 개요
- 조사 목적, 기간, 대상(학생 200명/학부모 200명), 조사 방법
2. 주요 결과 요약 (Executive Summary)
- 핵심 수치 3~4개를 한눈에 볼 수 있게 정리
- 전체적 한 줄 평가
3. 학생 만족도 분석
- 항목별 만족도 결과 (표 포함)
- 성별 비교 주요 포인트
- 주관식 분석 결과 (카테고리별 요약)
4. 학부모 만족도 분석
- 항목별 만족도 결과 (표 포함)
- 적정 비용 분석 결과
- 희망 지역 분석 결과
- 주관식 분석 결과 (카테고리별 요약)
5. 종합 인사이트 및 개선 제안
- 긍정적 성과 3가지
- 개선 필요 영역 3가지
- 2026 수학여행 제안사항 3가지
6. 부록
- 상세 데이터 표
[작성 조건]
- 공문서 톤: 간결하고 객관적, 감정 표현 배제
- 모든 수치에 데이터 출처 명시 (예: "학생 설문 기준")
- 표와 텍스트를 적절히 배합
- A4 기준 5~7페이지 분량
- 한국어로 작성
이 보고서를 Canvas 기능으로 작성해줘.
JavaScript
복사
보고서의 '종합 인사이트 및 개선 제안' 부분을 아래 조건으로 수정해줘:
- 개선 제안을 '즉시 실행 가능한 것'과 '중장기 검토 사항'으로 나눠줘
- 각 제안에 예상 소요 비용이나 담당 부서를 추가해줘
JavaScript
복사
첨부된 보고서를 기반으로 '학부모 안내용 수학여행 결과 안내문'에 들어갈 내용을 재구성해줘.
[대상]
학부모님 (가정통신문 또는 학교 홈페이지 게시용)
[톤 & 스타일]
- 딱딱한 보고서 톤이 아닌, 따뜻하고 친근한 안내 톤
- 전문 용어(표준편차, 중앙값 등) 사용하지 않기
- 학부모 입장에서 궁금한 것 위주로 구성
[포함할 내용 5가지]
1. 수학여행 개요 (언제, 어디서, 몇 명)
2. 학생들의 만족도 하이라이트 (가장 좋아한 것, 아쉬웠던 것)
3. 학부모 설문 결과 요약 (안전 신뢰도 높았다는 점 강조)
4. 학생들의 생생한 한마디 (주관식에서 인상적인 응답 5개 발췌)
5. 2026년 수학여행 개선 방향 (학부모 의견 반영 계획)
[출력 형식]
위 5가지 항목별로 제목 + 본문 2~3문장 + 핵심 수치 1~2개로 정리해줘.
JavaScript
복사
아까 재구성한 학부모 안내 콘텐츠를 기반으로, 5장짜리 안내 슬라이드의 구조를 JSON 형태로 만들어줘.
[슬라이드 구성]
- 슬라이드 1: 표지 (제목 + 학교명 + 날짜)
- 슬라이드 2: 수학여행 만족도 한눈에 보기 (핵심 수치 4~5개)
- 슬라이드 3: 아이들의 생생한 한마디 (주관식 응답 발췌 5개)
- 슬라이드 4: 학부모님 설문 결과 요약 (안전 신뢰도 강조 + 희망 지역 TOP3)
- 슬라이드 5: 2026 수학여행, 이렇게 준비하겠습니다 (개선 방향 3가지)
[JSON 형식 규칙]
각 슬라이드를 아래 형태로 구성해줘:
{
"slides": [
{
"slideNumber": 1,
"layout": "title",
"backgroundColor": "#색상코드",
"textElements": [
{
"id": "title",
"content": "한글 텍스트 내용",
"role": "제목",
"fontSize": 32,
"fontWeight": "bold",
"color": "#색상코드",
"position": {"x": "center", "y": "40%"}
},
{
"id": "subtitle",
"content": "한글 텍스트 내용",
"role": "부제목",
"fontSize": 18,
"fontWeight": "normal",
"color": "#색상코드",
"position": {"x": "center", "y": "55%"}
}
],
"visualElements": [
{
"type": "icon/chart/shape/image",
"description": "시각 요소 설명",
"position": {"x": "값", "y": "값"},
"size": {"width": "값", "height": "값"}
}
]
}
]
}
[핵심 규칙]
1. 모든 한글 텍스트는 반드시 textElements의 content 안에만 넣을 것
2. visualElements에는 한글 텍스트를 포함하지 말 것 (아이콘, 도형, 배경 등만)
3. 데이터 수치는 보고서의 실제 데이터를 정확히 반영할 것
4. 슬라이드당 텍스트 요소는 최대 6개 이내로 제한 (깔끔하게)
5. 각 textElement에 fontSize, fontWeight, color를 반드시 명시할 것
JavaScript
복사
위에서 만든 JSON 구조에 아래 디자인 시스템을 적용해서, 최종 슬라이드를 생성해줘.
[디자인 시스템]
1. 컬러 팔레트
- primary: "#2B5797" (남색 - 제목, 강조)
- secondary: "#4ECDC4" (민트 - 포인트, 아이콘)
- accent: "#FF6B6B" (코랄 - 핵심 수치 강조)
- background: "#F8F9FA" (밝은 회색 - 슬라이드 배경)
- surface: "#FFFFFF" (흰색 - 카드/박스 배경)
- text_primary: "#2D3436" (진한 회색 - 본문)
- text_secondary: "#636E72" (중간 회색 - 부제목/설명)
2. 타이포그래피
- 제목 (h1): Pretendard Bold, 32px, color: primary
- 부제목 (h2): Pretendard SemiBold, 22px, color: text_primary
- 본문 (body): Pretendard Regular, 16px, color: text_primary
- 강조 수치 (number): Pretendard ExtraBold, 48px, color: accent
- 캡션 (caption): Pretendard Regular, 13px, color: text_secondary
※ Pretendard가 불가능한 경우 Noto Sans KR 사용
3. 레이아웃 규칙
- 슬라이드 비율: 16:9
- 여백: 상하좌우 40px
- 카드형 정보 박스: 모서리 둥글기 12px, 그림자 subtle drop shadow
- 정보 간 간격: 최소 20px
- 아이콘: Material Icons 또는 심플한 라인 아이콘 스타일
4. 슬라이드별 레이아웃 가이드
- 슬라이드 1 (표지): 중앙 정렬, 학교 로고 자리 상단, 제목 중앙, 날짜 하단
- 슬라이드 2 (만족도 한눈에): 4~5개 지표를 카드 형태로 가로 배치, 각 카드에 아이콘+수치+항목명
- 슬라이드 3 (학생 한마디): 말풍선 또는 인용 카드 형태로 5개 배치
- 슬라이드 4 (학부모 결과): 좌측에 만족도 수치, 우측에 희망 지역 TOP3
- 슬라이드 5 (개선 방향): 3개 개선안을 번호+아이콘+설명 카드로 세로 배치
[생성 조건]
- 위에서 검수한 JSON의 textElements 한글 텍스트를 정확히 그대로 사용할 것
- 한글 텍스트는 반드시 텍스트 레이어로 렌더링할 것 (이미지 안에 한글을 그리지 말 것)
- 각 슬라이드를 개별 이미지로 생성해줘
- 텍스트가 잘리지 않도록 여유 공간 확보
JavaScript
복사
운영 참고사항
•
실습 주제는 공통 주제를 제공하여 전원 동일한 기획서를 작성 (자유 주제 시 참가자별 편차가 크고 지원 어려움)
•
기획 봇은 강사가 사전 제작한 커스텀 AI 도구로, 질문-응답 방식으로 기획을 유도
•
PPT 변환은 가볍게 다루며, 깊은 디자인 작업보다는 AI 자동화에 초점
2. AI활용 데이터 관리 실습
•
일자 : 5/6(수), 10/28(수)
•
시간 : 6시간
•
실무 데이터를 AI로 분석하고 관리하는 역량을 기르는 과정입니다. 만족도 조사 등 병원 실무 데이터를 활용하여 데이터 전처리, 분석, 시각화까지 AI 도구를 통해 실습합니다.
사전 준비사항
•
참가자 사전 설문조사 필수 실시 (엑셀 역량 수준 파악)
•
확인 항목: VLOOKUP 사용 가능 여부, 피벗테이블 경험 여부, 일상적 엑셀 업무 내용
•
설문 결과에 따라 실습 난이도 및 진행 속도 조절
커리큘럼
차시 | 진행내용 | 활용 도구 |
Session1.
데이터 분석 기초 이해 | • 데이터 분석을 접근하는 방식 (데이터 전처리, Raw data 인사이트, 패턴찾기)
• 최근 데이터분석 트렌드 (에이전트, 클로드 코드 등) | |
Session2.
AI로 데이터 분석 활용하기 | •[실습] 병원 만족도 조사 로데이터 (더미데이터) 와 Gemini 활용하여 데이터 분석하기
| Gemini Canvas
Google Docs |
Session3.
데이터 시각화와 대시보드 활용과
바이브코딩 | •효과적인 데이터 시각화 원칙과 AI를 활용한 차트/그래프 생성 방법
[실습] 분석 결과 시각화 자동화 방법
- 주요 지표 차트 생성 / 간단한 대시보드 형태 구성 / 보고용 시각 자료 완성
•VBA/자동화 (반복 업무 자동화 및 챗봇 웹서비스 만들기 시연 및 실습) | Excel
Google Sheet
Gemini
Google ai studio |
실습 프롬프트 예시
첨부한 엑셀 파일은 이서중학교 2025년 수학여행(1박 2일) 만족도 조사 데이터야.
다음을 정리해줘:
1. 시트별 구성 (시트명, 응답 수, 컬럼 목록)
2. 정량 데이터 항목과 척도
3. 주관식 데이터 항목
4. 데이터에서 눈에 띄는 특이사항 (결측치, 이상치 등)
표 형태로 깔끔하게 정리해줘.
JavaScript
복사
너는 교육행정 데이터 분석 전문가야.
방금 파악한 이서중학교 수학여행 만족도 데이터의 [학생] 시트를 분석해줘.
[분석 요청]
1. 항목별 기초 통계
- 6개 만족도 항목(전반적, 체험활동, 일정/이동, 숙소, 식사, 안전관리)의 평균, 중앙값, 최빈값, 표준편차를 표로 정리
- 평균 기준으로 높은 순서대로 정렬
2. 성별 비교 분석
- 남학생/여학생별 6개 항목 평균을 비교 표로 정리
- 성별 간 차이가 0.3점 이상인 항목은 별도 표시
3. 만족도 분포 분석
- 전반적 만족도의 점수별(1~5점) 응답 수와 비율을 표로 정리
- 3점 이하 응답 비율(불만족 비율)을 산출
4. 핵심 발견사항
- 가장 만족도가 높은 항목과 그 의미
- 가장 만족도가 낮은 항목과 개선 필요성
- 성별 차이가 두드러진 항목과 시사점
[출력 형식]
- 각 분석 항목별로 표 + 해석 코멘트 구성
- 숫자는 소수점 둘째자리까지 표시
- 해석은 '교감·교장 보고용'에 맞게 간결하고 객관적으로 작성
JavaScript
복사
실습 파일 취합과 분배
•
각 부서에서 받은 파일을 쉽게 취합하기
◦
원래 프롬프트
너는 vba코드 개발자로 실무에서 엑셀로 개발하고 있어
<location>
C:\Users\alsrb\Desktop\AI 데이터실습\drive-download-20250824T214001Z-1-001\MAPO_LIB_AIR_2022년(2022.01.03~2023.01.01)
</location>
# 목표
다음 엑셀 파일을 종합하는 VBA 코드를 작성해주세요.
- 위 폴더에 있는 엑셀 데이터를 취합하여 코드를 실행한 Sheet1에 정리할 것
- 열 이름을 기준으로 파일을 종합할 것
- 데이터를 종합한 후 "마포구 공기질현황_{오늘 날짜}" 이름을 가진 엑셀 파일로 저장할 것
- 종합이 완료된 후 완료 메시지를 출력할 것
프롬프트는 한글로 제공
JavaScript
복사
◦
수정 프롬프트
<role>
당신은 20년 경력의 Excel VBA 전문가입니다. 실무에서 대용량 데이터 처리와 자동화 솔루션을 개발해온 경험이 풍부합니다. 사용자의 요구사항을 정확히 파악하고, 안정적이고 효율적인 VBA 코드를 작성하는 것이 당신의 전문 분야입니다.
</role>
<task>
여러 개의 데이터 파일을 하나의 Excel 시트로 통합하는 VBA 코드를 작성해주세요.
</task>
<requirements>
<primary_goal>
지정된 폴더 내의 모든 CSV와 Excel 파일의 데이터를 하나의 워크시트에 통합하여 새로운 파일로 저장
</primary_goal>
<specific_conditions>
- 폴더 경로: C:\Users\alsrb\Desktop\AI 데이터실습\drive-download-20250824T214001Z-1-001\MAPO_LIB_AIR_2022년(2022.01.03~2023.01.01)\
- 첫 번째 파일의 헤더행만 유지, 이후 파일들은 데이터만 추가
- 파일 형식: CSV (EUC-KR 인코딩), Excel (xls, xlsx)
- 저장 파일명: "마포구 공기질현황_YYYY-MM-DD.xlsx" 형식
- 에러 발생 시에도 다른 파일들은 계속 처리
</specific_conditions>
<technical_requirements>
- 메모리 효율적인 셀 단위 복사 방식 사용
- 원본 파일들은 ReadOnly 모드로 열기
- 새 워크북으로 저장하여 원본 보호
- 포괄적인 에러 처리 및 리소스 정리
- 사용자 친화적인 진행 상황 표시 및 완료 메시지
</technical_requirements>
</requirements>
<sample_data>
<file_structure>
폴더 내 파일 예시:
- MAPO_LIB_AIR_2022.01.0301.09.csv (3,356행)
- MAPO_LIB_AIR_2022.01.0310.16.csv (2,847행)
- MAPO_LIB_AIR_2022.01.1723.24.csv (4,123행)
</file_structure>
<csv_header_example>
기관명,모델명,시리얼,데이터관측일시,온도(℃),습도(%),미세먼지(㎍/㎥),소음(㏈),이산화탄소(ppm),휘발성유기화합물(ppb),초미세먼지(㎍/㎥),학습능률지수(%),등록일자
</csv_header_example>
<data_row_example>
"마포구","AirGuard-K","V01G1613544","202201030855","1158","41","112","74","981","185","81","49","2022-01-03 08:59:29","",""
</data_row_example>
</sample_data>
<edge_cases>
<potential_issues>
- CSV 파일의 EUC-KR 인코딩으로 인한 한글 깨짐
- 빈 파일이나 헤더만 있는 파일
- 파일 접근 권한 문제
- 메모리 부족 상황
- 중복되거나 손상된 파일
</potential_issues>
</edge_cases>
<instructions>
단계별로 생각하세요:
1. 먼저 전체 작업 흐름을 분석하고
2. 필요한 변수와 객체들을 정의하며
3. 파일 형식별 처리 방법을 구분하고
4. 데이터 복사 로직을 설계한 후
5. 에러 처리와 리소스 정리 방안을 수립하세요
</instructions>
<response_format>
다음 형식으로 응답을 시작해주세요:
```vba
Sub 마포구_공기질_데이터_통합()
' ============================================
' 마포구 공기질 데이터 통합 프로그램
' 작성일: [날짜]
' 기능: 폴더 내 모든 CSV/Excel 파일을 하나의 시트로 통합
' ============================================
' 1단계: 변수 선언
Dim folderPath As String
Dim fileName As String
' [추가 변수들...]
' 2단계: 초기화 및 환경 설정
On Error GoTo ErrorHandler
' [초기화 코드...]
</response_format>
JavaScript
복사
◦
VBA코드 한 시트에 모든 데이터
Sub 마포구_공기질_데이터_종합_수정()
' 변수 선언
Dim folderPath As String
Dim fileName As String
Dim wb As Workbook
Dim ws As Worksheet
Dim sourceWb As Workbook
Dim sourceWs As Worksheet
Dim lastRow As Long
Dim sourceLastRow As Long
Dim sourceLastCol As Long
Dim isFirstFile As Boolean
Dim newFileName As String
Dim todayDate As String
Dim processedFiles As Long
Dim targetRow As Long
Dim i As Long, j As Long
Dim dateCol As Variant ' 등록일자 열 위치(숫자 또는 오류)
' 에러 처리 시작
On Error GoTo ErrorHandler
' 초기화
folderPath = "C:\Users\alsrb\Desktop\AI 데이터실습\drive-download-20250824T214001Z-1-001\MAPO_LIB_AIR_2022년(2022.01.03~2023.01.01)\"
Set wb = ThisWorkbook
Set ws = wb.Sheets("Sheet1")
isFirstFile = True
processedFiles = 0
todayDate = Format(Date, "yyyy-mm-dd")
newFileName = "마포구 공기질현황_" & todayDate & ".xlsx"
' Sheet1 초기화
ws.Cells.Clear
' 화면 업데이트 및 경고 비활성화
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
' CSV 파일 처리
fileName = Dir(folderPath & "*.csv")
Do While fileName <> ""
Application.StatusBar = "처리 중: " & fileName
' CSV 파일 열기 시도
On Error Resume Next
Set sourceWb = Nothing
' CSV 파일 열기
Set sourceWb = Workbooks.Open(folderPath & fileName, _
Format:=6, _
Delimiter:=",", _
Origin:=xlWindows, _
UpdateLinks:=False)
If Err.Number = 0 And Not sourceWb Is Nothing Then
Set sourceWs = sourceWb.Sheets(1)
' 데이터 범위 확인
sourceLastRow = sourceWs.Cells(sourceWs.Rows.Count, 1).End(xlUp).Row
sourceLastCol = sourceWs.Cells(1, sourceWs.Columns.Count).End(xlToLeft).Column
If sourceLastRow > 0 And sourceLastCol > 0 Then
If isFirstFile Then
' 첫 번째 파일: 헤더 포함 전체 복사 (값만)
For i = 1 To sourceLastRow
For j = 1 To sourceLastCol
ws.Cells(i, j).Value = sourceWs.Cells(i, j).Value
Next j
Next i
targetRow = sourceLastRow + 1
isFirstFile = False
processedFiles = processedFiles + 1
' 헤더에서 "등록일자" 열 위치 파악
dateCol = Application.Match("등록일자", ws.Rows(1), 0)
Else
' 두 번째 파일부터: 헤더 제외하고 복사
If sourceLastRow > 1 Then
For i = 2 To sourceLastRow
For j = 1 To sourceLastCol
ws.Cells(targetRow, j).Value = sourceWs.Cells(i, j).Value
Next j
targetRow = targetRow + 1
Next i
processedFiles = processedFiles + 1
End If
End If
End If
' 파일 닫기 (저장하지 않음)
sourceWb.Close SaveChanges:=False
Set sourceWb = Nothing
End If
Err.Clear
On Error GoTo ErrorHandler
fileName = Dir
Loop
' Excel 파일 처리
fileName = Dir(folderPath & "*.xl*")
Do While fileName <> ""
If fileName <> wb.Name Then ' 현재 파일 제외
Application.StatusBar = "처리 중: " & fileName
On Error Resume Next
Set sourceWb = Nothing
Set sourceWb = Workbooks.Open(folderPath & fileName, _
ReadOnly:=True, _
UpdateLinks:=False)
If Err.Number = 0 And Not sourceWb Is Nothing Then
Set sourceWs = sourceWb.Sheets(1)
sourceLastRow = sourceWs.Cells(sourceWs.Rows.Count, 1).End(xlUp).Row
sourceLastCol = sourceWs.Cells(1, sourceWs.Columns.Count).End(xlToLeft).Column
If sourceLastRow > 0 And sourceLastCol > 0 Then
If isFirstFile Then
' 첫 번째 파일: 헤더 포함 전체 복사
For i = 1 To sourceLastRow
For j = 1 To sourceLastCol
ws.Cells(i, j).Value = sourceWs.Cells(i, j).Value
Next j
Next i
targetRow = sourceLastRow + 1
isFirstFile = False
processedFiles = processedFiles + 1
' 헤더에서 "등록일자" 열 위치 파악
dateCol = Application.Match("등록일자", ws.Rows(1), 0)
Else
' 두 번째 파일부터: 헤더 제외하고 복사
If sourceLastRow > 1 Then
For i = 2 To sourceLastRow
For j = 1 To sourceLastCol
ws.Cells(targetRow, j).Value = sourceWs.Cells(i, j).Value
Next j
targetRow = targetRow + 1
Next i
processedFiles = processedFiles + 1
End If
End If
End If
sourceWb.Close SaveChanges:=False
Set sourceWb = Nothing
End If
Err.Clear
On Error GoTo ErrorHandler
End If
fileName = Dir
Loop
' === 등록일자 열 서식 적용 (원본처럼 보여주기) ===
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
If Not IsError(dateCol) And lastRow >= 2 Then
With ws.Range(ws.Cells(2, CLng(dateCol)), ws.Cells(lastRow, CLng(dateCol)))
.NumberFormat = "yyyy-mm-dd hh:mm"
End With
End If
' 결과 확인 및 저장
If lastRow > 1 Then
' 간단한 서식 적용
ws.Range("A1").CurrentRegion.Columns.AutoFit
' 새 워크북으로 저장 (현재 워크북과 분리)
Dim newWb As Workbook
Set newWb = Workbooks.Add
' 데이터 복사 (값 붙여넣기)
ws.Range("A1").CurrentRegion.Copy
With newWb.Sheets(1).Range("A1")
.PasteSpecial xlPasteValues
Application.CutCopyMode = False
End With
' 새 통합 파일에서도 등록일자 열 서식 재적용
Dim newDateCol As Variant, newLastRow As Long
newLastRow = newWb.Sheets(1).Cells(newWb.Sheets(1).Rows.Count, 1).End(xlUp).Row
newDateCol = Application.Match("등록일자", newWb.Sheets(1).Rows(1), 0)
If Not IsError(newDateCol) And newLastRow >= 2 Then
With newWb.Sheets(1).Range(newWb.Sheets(1).Cells(2, CLng(newDateCol)), _
newWb.Sheets(1).Cells(newLastRow, CLng(newDateCol)))
.NumberFormat = "yyyy-mm-dd hh:mm"
End With
End If
' 저장
newWb.SaveAs folderPath & newFileName, FileFormat:=xlOpenXMLWorkbook
newWb.Close SaveChanges:=False
MsgBox "작업 완료!" & vbCrLf & _
"처리된 파일: " & processedFiles & "개" & vbCrLf & _
"총 행수: " & (lastRow - 1) & "행" & vbCrLf & _
"저장된 파일: " & newFileName, vbInformation
Else
MsgBox "처리할 데이터가 없습니다." & vbCrLf & _
"폴더 경로를 확인해주세요: " & vbCrLf & folderPath, vbExclamation
End If
GoTo CleanUp
ErrorHandler:
MsgBox "오류 발생: " & Err.Description & vbCrLf & _
"오류 번호: " & Err.Number & vbCrLf & _
"현재 처리 중인 파일: " & fileName, vbCritical
CleanUp:
' 정리
If Not sourceWb Is Nothing Then
sourceWb.Close SaveChanges:=False
Set sourceWb = Nothing
End If
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
Application.StatusBar = False
End Sub
JavaScript
복사
◦
통합된 파일을 다시 월별로 나누기
Sub 월별_시트_분리_등록일자기준()
Const SOURCE_SHEET_NAME As String = "Sheet1" ' 통합 데이터가 있는 시트명
Dim wb As Workbook, wsSrc As Worksheet
Dim lastRow As Long, lastCol As Long
Dim dateCol As Variant
Dim i As Long, m As Long
Dim val As Variant
Dim wsMonth(1 To 12) As Worksheet
Dim nextRow(1 To 12) As Long
Dim hdr As Range
Dim altHeaders As Variant, h As Variant
On Error GoTo ErrH
Set wb = ThisWorkbook
' 소스 시트 참조 (없으면 ActiveSheet 사용)
If SheetExists(SOURCE_SHEET_NAME, wb) Then
Set wsSrc = wb.Worksheets(SOURCE_SHEET_NAME)
Else
Set wsSrc = ActiveSheet
End If
' 데이터 범위
lastRow = wsSrc.Cells(wsSrc.Rows.Count, 1).End(xlUp).Row
lastCol = wsSrc.Cells(1, wsSrc.Columns.Count).End(xlToLeft).Column
If lastRow < 2 Then
MsgBox "데이터가 없습니다(헤더만 존재).", vbExclamation
Exit Sub
End If
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
' 등록일자 열 찾기 (여러 후보 허용)
dateCol = Application.Match("등록일자", wsSrc.Rows(1), 0)
If IsError(dateCol) Then
altHeaders = Array("등록 일자", "측정일시", "일시", "Date", "날짜", "작성일자")
For Each h In altHeaders
dateCol = Application.Match(h, wsSrc.Rows(1), 0)
If Not IsError(dateCol) Then Exit For
Next h
End If
If IsError(dateCol) Then
MsgBox "헤더 행에서 '등록일자' 열을 찾을 수 없습니다." & vbCrLf & _
"헤더명을 확인하거나 코드의 대체 헤더 목록을 수정하세요.", vbCritical
GoTo Clean
End If
' 기존 월 시트 정리(있으면 삭제)
For m = 1 To 12
If SheetExists(CStr(m) & "월", wb) Then
wb.Worksheets(CStr(m) & "월").Delete
End If
Next m
' 월 시트 생성 + 헤더 복사
Set hdr = wsSrc.Range(wsSrc.Cells(1, 1), wsSrc.Cells(1, lastCol))
For m = 1 To 12
Set wsMonth(m) = wb.Worksheets.Add(After:=wsSrc)
wsMonth(m).Name = CStr(m) & "월"
hdr.Copy Destination:=wsMonth(m).Range("A1")
nextRow(m) = 2
Next m
' 본문 행을 월별로 분배
For i = 2 To lastRow
val = wsSrc.Cells(i, CLng(dateCol)).Value
' 날짜 판별 및 월 추출
If IsDate(val) Then
m = Month(CDate(val))
Else
' 표시문자(Text)로 들어온 경우에도 시도
val = wsSrc.Cells(i, CLng(dateCol)).Text
If IsDate(val) Then
m = Month(CDate(val))
Else
' 날짜 인식 안 되면 건너뜀(필요 시 로그 처리)
GoTo ContinueLoop
End If
End If
' 행 전체를 해당 월 시트에 복사(값 기준)
wsMonth(m).Cells(nextRow(m), 1).Resize(1, lastCol).Value = _
wsSrc.Cells(i, 1).Resize(1, lastCol).Value
nextRow(m) = nextRow(m) + 1
ContinueLoop:
Next i
' 서식 및 정리
For m = 1 To 12
With wsMonth(m)
' 등록일자 열 표시형식
On Error Resume Next
.Columns(CLng(dateCol)).NumberFormat = "yyyy-mm-dd hh:mm"
On Error GoTo 0
.Columns.AutoFit
End With
Next m
MsgBox "완료: 등록일자 기준으로 월별 시트를 생성했습니다." & vbCrLf & _
"원본 시트: " & wsSrc.Name, vbInformation
Clean:
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
Exit Sub
ErrH:
MsgBox "오류: " & Err.Description, vbCritical
Resume Clean
End Sub
Private Function SheetExists(shtName As String, wb As Workbook) As Boolean
Dim sht As Worksheet
On Error Resume Next
Set sht = wb.Worksheets(shtName)
SheetExists = Not sht Is Nothing
On Error GoTo 0
End Function
JavaScript
복사
◦
1개의 파일을 시트별 나눠서 분배하기
Sub 월별_파일_분리_등록일자기준()
Const SOURCE_SHEET_NAME As String = "Sheet1" ' 통합 데이터 시트
Const DATE_HEADER As String = "등록일자" ' 기준 열 이름(헤더)
Const OUTPUT_PREFIX As String = "마포구 공기질현황_" ' 저장 파일 접두사
Const SPLIT_BY_YEAR As Boolean = False ' True: 연/월로 따로 저장, False: 월만 기준
Const CREATE_EMPTY_FILES As Boolean = False ' True: 해당 월 데이터 없어도 헤더만 파일 생성
Dim wb As Workbook, ws As Worksheet
Dim lastRow As Long, lastCol As Long
Dim dateCol As Variant, altHeaders As Variant, h As Variant
Dim i As Long, m As Long, yr As Long
Dim val As Variant
Dim basePath As String, outDir As String, saveName As String, key As String
Dim fso As Object
Dim dict As Object ' key: "m" 또는 "yyyy-m" → 새 워크북
Dim newWb As Workbook, newWs As Worksheet
Dim nextRow As Object ' key: 위와 동일 → 다음 행 번호(Long)
On Error GoTo ErrH
Set wb = ThisWorkbook
If SheetExists(SOURCE_SHEET_NAME, wb) Then
Set ws = wb.Worksheets(SOURCE_SHEET_NAME)
Else
Set ws = ActiveSheet
End If
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
If lastRow < 2 Then
MsgBox "데이터가 없습니다(헤더만 존재).", vbExclamation
Exit Sub
End If
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
' 등록일자 열 찾기
dateCol = Application.Match(DATE_HEADER, ws.Rows(1), 0)
If IsError(dateCol) Then
altHeaders = Array("등록 일자", "측정일시", "일시", "Date", "날짜", "작성일자")
For Each h In altHeaders
dateCol = Application.Match(h, ws.Rows(1), 0)
If Not IsError(dateCol) Then Exit For
Next h
End If
If IsError(dateCol) Then
MsgBox "헤더에서 '" & DATE_HEADER & "' 열을 찾지 못했습니다.", vbCritical
GoTo Clean
End If
' 출력 폴더 준비
basePath = wb.Path
If Len(basePath) = 0 Then basePath = CreateObject("WScript.Shell").SpecialFolders("Desktop")
outDir = basePath & "\월별_분리_" & Format(Date, "yyyymmdd")
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(outDir) Then fso.CreateFolder outDir
' 월별 워크북/다음행 관리용 딕셔너리
Set dict = CreateObject("Scripting.Dictionary")
Set nextRow = CreateObject("Scripting.Dictionary")
' 헤더 범위(값)
Dim headerArr As Variant
headerArr = ws.Range(ws.Cells(1, 1), ws.Cells(1, lastCol)).Value
' 본문을 한 번만 순회하면서 해당 키(월 또는 연-월) 워크북에 누적
For i = 2 To lastRow
val = ws.Cells(i, CLng(dateCol)).Value
If Not IsDate(val) Then
val = ws.Cells(i, CLng(dateCol)).Text ' 텍스트일 수도 있어 재시도
End If
If IsDate(val) Then
m = Month(CDate(val))
yr = Year(CDate(val))
If SPLIT_BY_YEAR Then
key = CStr(yr) & "-" & CStr(m) ' 예: "2022-1"
Else
key = CStr(m) ' 예: "1"
End If
' 키용 워크북이 없으면 생성하여 헤더 세팅
If Not dict.Exists(key) Then
Set newWb = Workbooks.Add
Set newWs = newWb.Sheets(1)
newWs.Name = "데이터"
newWs.Range("A1").Resize(1, lastCol).Value = headerArr
' 등록일자 열 서식
On Error Resume Next
newWs.Columns(CLng(dateCol)).NumberFormat = "yyyy-mm-dd hh:mm"
On Error GoTo 0
dict.Add key, newWb
nextRow.Add key, 2
End If
' 행 복사(값만)
Set newWb = dict(key)
Set newWs = newWb.Sheets(1)
newWs.Cells(nextRow(key), 1).Resize(1, lastCol).Value = _
ws.Cells(i, 1).Resize(1, lastCol).Value
nextRow(key) = nextRow(key) + 1
End If
Next i
' 저장: 생성된 각 키에 대해 파일 만들기
Dim k As Variant, rowCnt As Long, mon As Long, yearPart As String
For Each k In dict.Keys
Set newWb = dict(k)
Set newWs = newWb.Sheets(1)
rowCnt = newWs.Cells(newWs.Rows.Count, 1).End(xlUp).Row - 1 ' 데이터 행 수(헤더 제외)
If rowCnt = 0 And Not CREATE_EMPTY_FILES Then
newWb.Close SaveChanges:=False
Else
' 파일명 결정
If SPLIT_BY_YEAR Then
yearPart = Split(CStr(k), "-")(0)
mon = CLng(Split(CStr(k), "-")(1))
saveName = OUTPUT_PREFIX & yearPart & "_" & mon & "월.xlsx"
Else
mon = CLng(k)
saveName = OUTPUT_PREFIX & mon & "월.xlsx"
End If
' 너비자동/날짜서식 보정
On Error Resume Next
newWs.Columns(CLng(dateCol)).NumberFormat = "yyyy-mm-dd hh:mm"
On Error GoTo 0
newWs.Columns.AutoFit
newWb.SaveAs Filename:=(outDir & "\" & saveName), _
FileFormat:=xlOpenXMLWorkbook
newWb.Close SaveChanges:=False
End If
Next k
MsgBox "완료: '" & outDir & "' 폴더에 월별 파일 저장이 끝났습니다.", vbInformation
Clean:
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
Exit Sub
ErrH:
MsgBox "오류: " & Err.Description, vbCritical
Resume Clean
End Sub
Private Function SheetExists(shtName As String, wb As Workbook) As Boolean
Dim sht As Worksheet
On Error Resume Next
Set sht = wb.Worksheets(shtName)
SheetExists = Not sht Is Nothing
On Error GoTo 0
End Function
JavaScript
복사
•
대시보드 프롬프트 예시
🧭 목적
가맹점 현황을 시각적으로 파악할 수 있는 대시보드를 생성하는 것이 목표입니다.
✅ 요청사항
두 개의 데이터를 기반으로, 먼저 각 데이터의 구조를 분석하고,
아래의 # 데이터 구조를 참고하여 데이터를 읽은 후,
해당 데이터를 가장 잘 설명할 수 있는 피벗 테이블과 차트 구성안을 총 8세트 제안해주세요.
각 제안은 다음 항목을 포함해야 합니다:
제안 이유: 이 분석이 왜 중요한지
피벗 테이블 구성: 행(Row), 열(Column), 값(Value), 필터(Filter) 등 정의
추천 차트 유형: 막대형, 선형, 원형, 누적형 등
활용 예시 또는 해석 포인트
📌 추가사항
실제 Excel 또는 Google Sheets 기반으로 구현 가능한 수준으로 제안
중복 없이 다양한 관점의 시각화 구성
비교, 추이, 비율, 분포, 랭킹 등 다양한 인사이트 도출이 가능하도록 제안
⬇️ 참고 데이터
# 데이터 구조는 아래에 첨부되어 있다고 가정합니다.
JavaScript
복사
챗봇 제작 사례
운영 참고사항
•
참가자 엑셀 수준 편차가 클 수 있으므로, 사전 설문 기반 난이도 조절 필수
•
VLOOKUP/피벗테이블 미숙련자가 많을 경우, AI 자동 생성 중심으로 진행
•
실습 데이터는 만족도 조사 데이터를 기본으로 제공 (익명화된 샘플)
•
보조 강사가 실습 중 개별 지원 (특히 엑셀 기본 조작에서 막히는 참가자 지원)
•
VBA/자동화는 깊이 있게 다루지 않고, 가능성을 보여주는 수준으로 소개
3. AI로 만드는 병원 실무형 콘텐츠 제작 실습
•
일자 : 6/24(수), 12/1(화)
•
시간 : 6시간
•
AI 이미지 생성, 영상 변환, 인포그래픽 제작 등을 통해 병원 홍보물, 포스터, 카드뉴스 등 실무 콘텐츠를 직접 만드는 실습 과정입니다.
커리큘럼
차시 | 진행내용 | 활용 도구 |
Session1.
AI 이미지 생성 기초 | •이미지 생성 AI 원리 소개
•효과적인 이미지 프롬프트 작성법 (스타일/분위기/구도 지정 방법)
[실습] 기본 이미지 생성 체험
- 다양한 스타일의 이미지 생성
- 프롬프트 반복 수정을 통한 품질 향상 | Google AI Studio
(Gemini 이미지 생성) |
Session2.
병원 실무 콘텐츠 이미지 제작 | •병원 콘텐츠 유형별 이미지 생성
- 커스텀 이미지 생성 봇 활용 (강사 제작 도구)
[실습] 실무용 이미지 제작
- 병원 홍보 포스터용 이미지 생성
- 카드뉴스 소재 이미지 제작
- 건강정보 콘텐츠용 일러스트 생성 | Google AI Studio
커스텀 이미지생성 봇 |
Session3.
AI 영상 콘텐츠 맛보기 | •이미지에서 영상으로: AI 영상 생성 소개
- Kling AI / Google Veo 활용법
[실습] 생성한 이미지를 짧은 영상으로 변환
- 이미지 → 영상 변환 체험간단한 모션 효과 적용 | Kling AI
Google Veo |
Session4.
AI로 게시글 및 프레젠테이션 완성하기 | •효과적인 인포그래픽의 구성 요소
- NotebookLM을 활용한 시각 자료 생성
[실습] 병원 데이터/정보 기반 인포그래픽 제작
- 건강정보 인포그래픽 / 병원 서비스 안내 시각 자료
• NotebookLM의 프레젠테이션 기능 활용
- 텍스트 → 슬라이드 자동 생성
[실습] 종합 프레젠테이션 제작
- 오전에 만든 이미지/인포그래픽 활용병원 홍보/교육용 프레젠테이션 완성
- 디자인 다듬기 및 최종 점검 결과물 공유 및 상호 피드백 | NotebookLM
Google AI Studio |
