Home
디지털 리터러시

JB우리캐피탈 실무에 활용하는 AI 원데이 클래스 실습자료

본 자료는 현 공유드리는 대상자분들에게만 한해 제공드리며, 부가기능 자료는 이미 공유되어 있는 자료로 공유가 가능하나 실습자료의 경우 외부 공유는 불허합니다.
강의 관련하여 문의사항 있는 경우 연락처로 문의주시거나, 이메일로 문의주시면 2~3일내 답변드리겠습니다:)
업무관련 고민되는 사항 있으시면 편하게 말씀주세요:) 같이 고민하겠습니다.
유민균 강사 010-2926-5476
이메일 : mkyoo@wedrawbusiness.com
목차

 커리큘럼

구 분
내 용
AI 기본 원리 및 작동 방식 이해
최근 AI 트렌드(기업사례 등)와 모델별 차이 (GPT, 클로드, 제미나이) 유료버전을 활용해야하는 이유 (무료 모델을 잘 사용하는 방법)
기본 프롬프트 작성 방법 및 실습
프롬프트를 써야 하는 이유와 프롬프팅의 기본 요소 이해
엑셀 및 VBA 스크립트를 활용한 AI 자동화 실습
실습 파일 취합과 분배   - 각 부서에서 받은 파일을 쉽게 취합하기, 1개의 파일을 시트별 나눠서 분배하기 실습 피벗테이블, 차트 자동화   - 기존에 내가 잘 활용하던 피벗테이블을 자동화하는 방법, raw data 피벗으로 셋팅하기 응용버전 : 대시보드 자동화 하기 나만의 에이전트 봇 만들기
교육자료 PDF (간단한 정보를 입력해주시면 확인할수있습니다)

 AI 기본 원리 및 작동 방식 이해

LLM AI 3대장

바이브코딩이란?

lovable로 만든 서비스
기획 도우미 봇

  기본 프롬프트 작성 방법 및 실습

공식가이드

프롬프트 최적화 도구

1.
클로드 프롬프트 최적화 도구 https://console.anthropic.com/dashboard

 명확하고 직접적이며 상세하게

 모호한 프롬프트
새로운 AcmeCloud 기능을 위한 마케팅 이메일을 작성해주세요.
JavaScript
복사
 구체적인 프롬프트
분기별 검토를 위해 고객 피드백을 익명화하는 것이 당신의 작업입니다. 지시사항: 1. 모든 고객 이름을 “CUSTOMER_[ID]“로 대체하세요(: “Jane Doe” → “CUSTOMER_001). 2. 이메일 주소를 “EMAIL_[ID]@example.com”으로 대체하세요. 3. 전화번호를 “PHONE_[ID]“로 수정하세요. 4. 특정 제품(: “AcmeCloud”)이 언급된 경우 그대로 두세요. 5. PII가 발견되지 않으면 메시지를 그대로 복사하세요. 6. 처리된 메시지만 출력하고 ”---“로 구분하세요. 처리할 데이터: {{FEEDBACK_DATA}}
JavaScript
복사

 예시(멀티샷 프롬프팅)를 사용하여 Claude의 행동 유도하기

 모호한 프롬프트
이 고객 피드백을 분석하고 문제를 분류하세요. 다음 카테고리를 사용하세요: UI/UX, 성능, 기능 요청, 통합, 가격 책정 및 기타. 또한 감정(긍정/중립/부정)우선순위(높음/중간/낮음)를 평가하세요. 피드백은 다음과 같습니다: {{FEEDBACK}}
JavaScript
복사
 구체적인 프롬프트
우리 CS팀이 구조화되지 않은 피드백으로 인해 어려움을 겪고 있습니다. 당신의 임무는 제품 및 엔지니어링 팀을 위해 피드백을 분석하고 문제를 분류하는 것입니다. 다음 카테고리를 사용하세요: UI/UX, 성능, 기능 요청, 통합, 가격 책정 및 기타. 또한 감정(긍정/중립/부정)우선순위(높음/중간/낮음)를 평가하세요. 다음은 예시입니다: <example> 입력: 새로운 대시보드는 엉망입니다! 로드하는 데 너무 오래 걸리고 내보내기 버튼을 찾을 수 없어요. 이것을 빨리 수정해주세요! 카테고리: UI/UX, 성능 감정: 부정 우선순위: 높음</example> 이제 이 피드백을 분석하세요: {{FEEDBACK}}
JavaScript
복사

 Claude가 생각하도록 하여(사고 연쇄 프롬프팅) 성능을 향상시키기

 모호한 프롬프트
당신은 재무 상담사입니다. 고객이 $10,000를 투자하고 싶어합니다. 두 가지 옵션 중 선택할 수 있습니다: A) 연간 12%의 수익률을 기록했지만 변동성이 있는 주식, 또는 B) 연간 6%를 보장하는 채권. 고객은 5년 후 주택 계약금으로 이 돈이 필요합니다. 어떤 옵션을 추천하시겠습니까?
JavaScript
복사
 구체적인 프롬프트
당신은 재무 상담사입니다. 고객이 $10,000를 투자하고 싶어합니다. 두 가지 옵션 중 선택할 수 있습니다: A) 연간 12%의 수익률을 기록했지만 변동성이 있는 주식, 또는 B) 연간 6%를 보장하는 채권. 고객은 5년 후 주택 계약금으로 이 돈이 필요합니다. 어떤 옵션을 추천하시겠습니까? 단계별로 생각하세요.
JavaScript
복사

 XML 태그를 사용하여 프롬프트 구조화하기

 모호한 프롬프트
당신은 AcmeCorp의 재무 분석가입니다. 투자자들을 위한 Q2 재무 보고서를 작성하세요. 작년의 이 예시처럼 수익 성장, 이익률, 현금 흐름 섹션을 포함하세요: {{Q1_REPORT}}. 이 스프레드시트의 데이터 포인트를 사용하세요: {{SPREADSHEET_DATA}}. 보고서는 매우 간결하고, 핵심적이며, 전문적이어야 하고 목록 형식이어야 합니다. 강점과 개선이 필요한 영역 모두를 강조해야 합니다.
JavaScript
복사
 구체적인 프롬프트
당신은 AcmeCorp의 재무 분석가입니다. 투자자들을 위한 Q2 재무 보고서를 작성하세요. AcmeCorp는 B2B SaaS 기업입니다. 우리 투자자들은 투명성과 실행 가능한 인사이트를 중요시합니다. 보고서에 이 데이터를 사용하세요:<data>{{SPREADSHEET_DATA}}</data> <instructions> 1. 다음 섹션을 포함하세요: 수익 성장, 이익률, 현금 흐름. 2. 강점과 개선이 필요한 영역을 강조하세요. </instructions> 간결하고 전문적인 톤을 유지하세요. 다음 구조를 따르세요: <formatting_example>{{Q1_REPORT}}</formatting_example>
JavaScript
복사
개별화된 항목을 채팅에서 입력시에는 아래와 같이 활용
<data>첨부된 스프레드시트 데이터를 분석해서</data>
JavaScript
복사

  시스템 프롬프트로 Claude에게 역할 부여하기

 모호한 프롬프트
우리의 2분기 재무 데이터를 분석하세요:<data>{{FINANCIALS}}</data>주요 트렌드를 강조하고 조치를 권장하세요
JavaScript
복사
 구체적인 프롬프트
귀하는 고성장 B2B SaaS 기업의 CFO입니다. 우리는 이사회에서 2분기 재무를 논의하고 있습니다:<data>{{FINANCIALS}}</data>주요 트렌드를 분석하고, 우려사항을 표시하며, 전략적 조치를 권장하세요. 투자자들은 공격적인 성장을 원하지만 소진율을 우려하고 있습니다.
JavaScript
복사

  더 나은 출력 제어를 위한 Claude의 응답 미리 채우기

 모호한 프롬프트
Extract the name, size, price, and color from this product description as a JSON object:<description>The SmartHome Mini is a compact smart home assistant available in black or white for only $49.99. At just 5 inches wide, it lets you control lights, thermostats, and other connected devices via voice or app—no matter where you place it in your home. This affordable little hub brings convenient hands-free control to your smart devices.</description>
JavaScript
복사
 구체적인 프롬프트
Extract the name, size, price, and color from this product description as a JSON object:<description>The SmartHome Mini is a compact smart home assistant available in black or white for only $49.99. At just 5 inches wide, it lets you control lights, thermostats, and other connected devices via voice or app—no matter where you place it in your home. This affordable little hub brings convenient hands-free control to your smart devices.</description> {
JavaScript
복사
Tips
시작 할 때 형식을 제공하기
긴 내용은 앞에 포함하기

요약하면!

내가 원하고자 하는 바를 자세하게 입력하고, 데이터분석에 필요한 예시를 제공하고, 사고모델이 아니여도 기본적으로 사고할수있도록 “단계별로 생각하세요”라고 하며 구조화를 위해 XML 형식을 사용하고 맨처음 시스템프롬프트로 역할을 지정하면서 답변하는 양식에는 바로 시작할 수 있도록 응답을 미리 채운다
만드는 프롬프트 (왼쪽 삼각형을 눌러주세요)
범용 프롬프트 탬플릿 구조
## 🔧 **범용 프롬프트 템플릿 구조** ```xml <role> [전문 분야][경력 년수]년 경력 전문가로서, [핵심 역량]에 특화된 솔루션을 제공합니다. </role> <task> [구체적인 작업 목표를 한 문장으로] </task> <requirements> <primary_goal> [메인 목표 상세 기술] </primary_goal> <specific_conditions> - [조건 1] - [조건 2] - [조건 3] </specific_conditions> <technical_requirements> - [기술적 요구사항 1] - [기술적 요구사항 2] - [성능/품질 요구사항] </technical_requirements> </requirements> <sample_data> <input_example> [실제 입력 데이터 샘플] </input_example> <expected_output> [기대하는 출력 형태] </expected_output> </sample_data> <edge_cases> <potential_issues> - [예상되는 문제 상황 1] - [예상되는 문제 상황 2] - [처리해야 할 특수 케이스] </potential_issues> </edge_cases> <instructions> 단계별로 생각하세요: 1. [1단계 작업] 2. [2단계 작업] 3. [3단계 작업] 4. [최종 검증] </instructions> <response_format> 다음 형식으로 응답해주세요: [미리 채워진 응답 템플릿] - [실행 가능한 코드/솔루션 시작 부분] - [주요 섹션 구조] - [결과 확인 방법] </response_format>
JavaScript
복사

  엑셀 및 VBA 스크립트를 활용한 AI 자동화 실습

(테스트) 새 모듈 입력
Sub HelloWorld() MsgBox "Hello JB WOORI CAPITAL!" End Sub
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
복사

실습 피벗테이블, 차트 자동화

기존에 내가 잘 활용하던 피벗테이블을 자동화하는 방법
월별 평균 습도, 평균 학습능률지수 피벗테이블과 차트 만들기
피벗데이터 활용할때 먼저 기존 데이터를 표로 만들어주는것!
프롬프트
엑셀 VBA로 다음 조건을 만족하는 전체 코드를 작성해줘. 1. "Sheet1" 시트에 이미 데이터가 있다고 가정할 때, - 먼저 이 데이터를 (ListObject)로 만들어줘. - 표에는 '등록일자'라는 열이 있고, 이 등록일자를 기준으로 연-("yyyy-mm") 형식의 값을 추가해서 "연월"이라는 새로운 열을 등록일자 열 오른쪽에 삽입해줘. - 연월 열도 표 범위에 포함되게 해줘. 2. 이후 "피벗" 시트를 새로 생성해서, - 첫 번째 피벗 테이블은 연월을 행 필드로, '습도(%)'를 평균값으로 계산해서 표시해줘. - 두 번째 피벗 테이블은 연월을 행 필드로, '학습능률지수(%)'를 평균값으로 계산해서 표시해줘. - 두 값 모두 소수점 둘째 자리까지 표시되도록 숫자 포맷("#,##0.00")을 설정해줘. 3. "피벗차트"라는 새 시트를 만들고, 다음과 같이 대시보드 스타일로 구성해줘: - 배경은 흰색 - 왼쪽 상단에는 가로 480, 세로 250 크기의 직사각형을 그리고 그 위에 '연월별 평균 습도(%)'에 대한 **선형 차트(line chart)**를 넣어줘. - 오른쪽 상단에도 같은 크기의 직사각형을 그리고 그 위에 '연월별 평균 학습능률지수(%)'에 대한 선형 차트를 넣어줘. - 두 차트 모두 데이터 라벨을 차트 위에 표시되도록 해줘. 4. 처음부터 있던 "피벗" 시트와 "피벗차트" 시트가 이미 존재하면 삭제한 후 새로 생성해줘. 코드 실행 완료 시에는 "대시보드 완성!"이라는 메시지 박스를 보여줘.
JavaScript
복사
코드
Sub 생성_피벗차트_대시보드() Dim wsData As Worksheet Dim wsPivot As Worksheet Dim wsChart As Worksheet Dim tbl As ListObject Dim rngData As Range Dim lastRow As Long, lastCol As Long Dim pt1 As PivotTable, pt2 As PivotTable Dim pc1 As PivotCache, pc2 As PivotCache Dim chart1 As ChartObject, chart2 As ChartObject Dim shp1 As Shape, shp2 As Shape Dim pf1 As PivotField, pf2 As PivotField Application.ScreenUpdating = False Application.DisplayAlerts = False ' 원본 시트 Set wsData = ThisWorkbook.Sheets("Sheet1") ' 기존 피벗/차트 시트 삭제 On Error Resume Next ThisWorkbook.Sheets("피벗").Delete ThisWorkbook.Sheets("피벗차트").Delete On Error GoTo 0 ' 기존 표 삭제 If wsData.ListObjects.Count > 0 Then wsData.ListObjects(1).Unlist End If ' 연월 열 추가 (등록일자 우측에 삽입) lastRow = wsData.Cells(wsData.Rows.Count, 1).End(xlUp).Row lastCol = wsData.Cells(1, Columns.Count).End(xlToLeft).Column If wsData.Cells(1, lastCol).Value <> "연월" Then wsData.Cells(1, lastCol + 1).Value = "연월" wsData.Range(wsData.Cells(2, lastCol + 1), wsData.Cells(lastRow, lastCol + 1)).FormulaR1C1 = "=TEXT(RC[-1],""yyyy-mm"")" End If ' 표 생성 Set rngData = wsData.Range(wsData.Cells(1, 1), wsData.Cells(lastRow, lastCol + 1)) Set tbl = wsData.ListObjects.Add(xlSrcRange, rngData, , xlYes) tbl.Name = "데이터표" ' 피벗 시트 생성 Set wsPivot = ThisWorkbook.Sheets.Add(After:=wsData) wsPivot.Name = "피벗" ' 피벗1 - 평균 습도(%) Set pc1 = ThisWorkbook.PivotCaches.Create(xlDatabase, tbl.Range) Set pt1 = pc1.CreatePivotTable(wsPivot.Range("A3"), "피벗습도") With pt1 .PivotFields("연월").Orientation = xlRowField Set pf1 = .AddDataField(.PivotFields("습도(%)"), "평균 습도", xlAverage) pf1.NumberFormat = "#,##0.00" End With ' 피벗2 - 평균 학습능률지수(%) Set pc2 = ThisWorkbook.PivotCaches.Create(xlDatabase, tbl.Range) Set pt2 = pc2.CreatePivotTable(wsPivot.Range("F3"), "피벗학습") With pt2 .PivotFields("연월").Orientation = xlRowField Set pf2 = .AddDataField(.PivotFields("학습능률지수(%)"), "평균 학습능률", xlAverage) pf2.NumberFormat = "#,##0.00" End With ' 차트 시트 생성 Set wsChart = ThisWorkbook.Sheets.Add(After:=wsPivot) wsChart.Name = "피벗차트" wsChart.Cells.Interior.Color = RGB(255, 255, 255) ' 대시보드 직사각형 2개 Set shp1 = wsChart.Shapes.AddShape(msoShapeRectangle, 30, 50, 480, 250) shp1.Fill.ForeColor.RGB = RGB(230, 230, 230) shp1.Name = "Chart1" Set shp2 = wsChart.Shapes.AddShape(msoShapeRectangle, 540, 50, 480, 250) shp2.Fill.ForeColor.RGB = RGB(230, 230, 230) shp2.Name = "Chart2" ' 차트1 - 평균 습도 (선형 + 라벨) Set chart1 = wsChart.ChartObjects.Add(Left:=shp1.Left + 10, Width:=shp1.Width - 20, _ Top:=shp1.Top + 10, Height:=shp1.Height - 20) With chart1.Chart .SetSourceData pt1.TableRange1 .ChartType = xlLine .HasTitle = True .ChartTitle.Text = "연월별 평균 습도(%)" .SeriesCollection(1).HasDataLabels = True End With ' 차트2 - 평균 학습능률지수 (선형 + 라벨) Set chart2 = wsChart.ChartObjects.Add(Left:=shp2.Left + 10, Width:=shp2.Width - 20, _ Top:=shp2.Top + 10, Height:=shp2.Height - 20) With chart2.Chart .SetSourceData pt2.TableRange1 .ChartType = xlLine .HasTitle = True .ChartTitle.Text = "연월별 평균 학습능률지수(%)" .SeriesCollection(1).HasDataLabels = True End With MsgBox "대시보드 완성! (선그래프 + 소수점 포맷)", vbInformation Application.ScreenUpdating = True End Sub
JavaScript
복사

응용버전 : 대시보드 자동화 하기

지역별, 10차 표준산업분류별 가맹점 데이터_202001, 서울 영등포구.xlsx
14.9 KB
지역별, 10차 표준산업분류별 가맹점 데이터_202007, 서울 영등포구.xlsx
14.8 KB
🧭 목적 가맹점 현황을 시각적으로 파악할 수 있는 대시보드를 생성하는 것이 목표입니다. ✅ 요청사항 두 개의 데이터를 기반으로, 먼저 각 데이터의 구조를 분석하고, 아래의 # 데이터 구조를 참고하여 데이터를 읽은 후, 해당 데이터를 가장 잘 설명할 수 있는 피벗 테이블과 차트 구성안을 총 8세트 제안해주세요. 각 제안은 다음 항목을 포함해야 합니다: 제안 이유: 이 분석이 왜 중요한지 피벗 테이블 구성: (Row), (Column), (Value), 필터(Filter) 등 정의 추천 차트 유형: 막대형, 선형, 원형, 누적형 등 활용 예시 또는 해석 포인트 📌 추가사항 실제 Excel 또는 Google Sheets 기반으로 구현 가능한 수준으로 제안 중복 없이 다양한 관점의 시각화 구성 비교, 추이, 비율, 분포, 랭킹 등 다양한 인사이트 도출이 가능하도록 제안 ⬇️ 참고 데이터 # 데이터 구조는 아래에 첨부되어 있다고 가정합니다.
JavaScript
복사

나만의 에이전트 봇 만들기

Google notebook LM으로 챗봇 만들기

gemini-for-google-workspace-prompting-guide-101.pdf
3.6 MB

회의 내용을 활용하기

미팅자료를 업로드하면 요약 제공
1.
1단계. 클로바 노트로 미팅내용을 녹음하기
지침 자세히보기
[참고] 전세자금보증상품 추천서비스 오픈API 활용 프로토타입 서비스 제작 하기

  일잘러될 수 있는 추가 정보

꿀팁! 이미지 생성 AI 활용하기

이미지 생성 프롬프트 작성 정리!

 노코드 프로그램으로 일잘러되기

 일잘러 업그레이드 툴

 랜딩페이지 역량 업그레이드 툴 : Framer, Dora

 브레인스토밍 쉽게 구조화 & 기획 초안 작성하기

PPT 초안 만들기

 세일즈 보다 스마트 하게 하기

1.
나의 자료 공유하기 ︎ 그리고 반응도에 따라 세일즈하기
[Tips] 새롭게 출시되는 핫한 프로덕트가 궁금하다면?

 크롬 확장 프로그램으로 업무 비서 만들기 : Sider로 유튜브 요약 등

이름
구분
링크
비고
업무생산성
https://workspace.google.com/u/0/marketplace/app/autocrat/539341275670
구글 워크스페이스 마켓플레이스

 디지털 리터러시를 위한 학습 꿀 정보 공유 : 퍼블리, 폴인, 추천 뉴스레터 등

제품명
카테고리
URL
부가설명
ai
디자인
https://namelix.com/
브랜드로고
ai
디자인
https://www.mixo.io/
웹페이지 제작
ai
콘텐츠
ttps://rytr.me/?via=shan
스크립트 제작
콘텐츠
아티클
구독형
https://publy.co/
콘텐츠
아티클
구독형
https://folin.co/
데이터
검색
트렌드
https://some.co.kr/
데이터
검색
트렌드
마케팅
https://searchad.naver.com/
Load more
Copyright ⓒ 위드로우비즈니스 유민균 All rights reserved.
mkyoo@wedrawbusiness.com
  유민균 대표와 미팅하기