[VBA] ChatGPT API를 활용하여 엑셀에서 GPT사용하기
챗GPT는 웹브라우저로 접속해 사용할 수도 있지만,
API를 활용해서 사용할 수도 있다.(물론 유료로;)
일하다 보면 엑셀에서 바로 질문하고, 시트에 바로 답변을 받아보고 싶은 쓸데없는(?) 호기심이 발동할 때가 있다.
그래서 온라인에서 어떤 분이 작성한 앱스크립트 코드를 보고, 이를 VBA 코드로 다시 만들어 봤다.
대부분의 GPT 서비스는 이런 식으로 API를 연결해 사용하는 방식일 것이다.
아무튼, GPT의 도움을 받아 대충 느낌적인 느낌으로 VBA 코드를 끄적여 본다. 😁
| 프로젝트? 요약
1. OpenAI API key를 발급한다.
2. VBA로 코딩(발급받은 API로 엑셀에서 GPT서비스에 접근)한다.
3. 어디에 쓸 수 있을까 고민해 본다.ㅎㅎ
| 준비사항
- OpenAI API Key 발급하기 : https://platform.openai.com/settings/organization/api-keys
- API 키 발급을 위해 최소 $5 결제가 필요하다. TEST 해보고 API에 대한 감을 익히기 위해서 결제해 보길 강력 추천한다. 해본 사람과 안 해본 사람의 차이는......(AI시대에 이것저것 많이 해본 놈이 뭐라도 한다.)
- API란?? 간단하게 엑셀에서 GPT를 사용할 수 있는 디지털 열쇠 같은 거라 생각하면 된다.
- 프로그램끼리 서로서로 요청하고 결과를 받아오는 통로 같은 느낌적인 느낌
- API Key 보관 및 복사 : 결제 후 발급받은 Key는 반드시 메모장 등에 복사해 놔야 한다.(다시 못 봄!!)
| VBA 사용자 정의 함수 만들기
- 다음으로 VBA 코딩을 해보자.
- 엑셀시트 안의 이미지를 GPT가 분석하는 사용자 정의 함수를 GPT로 만들어 보자.
- GPT로 코드 주석도 같이 초보자도 알기 쉽게?? 넣어달라고 했다.
Function GPTImage(imageUrl As String, Optional prompt As String = "이미지를 자세히 설명해줘") As String
' ===========================
' 변수 선언
' ===========================
Dim OPENAI_API_KEY As String ' OpenAI API 키
Dim modelName As String ' 사용할 모델 이름 (예: gpt-4-vision-preview)
Dim maxTokens As Integer ' 최대 출력 토큰 수
Dim apiUrl As String ' API 요청 URL
Dim payload As String ' API에 전달할 JSON 형식의 데이터
Dim response As String ' API로부터 받은 응답 (JSON 형식)
Dim http As Object ' HTTP 요청을 위한 XMLHTTP 객체
Dim json As Object ' JSON 파싱을 위한 객체
Dim data As Object ' JSON 파싱 후 데이터 저장 객체
' ===========================
' API Key, 모델명, max_tokens 가져오기
' ===========================
' "설정" 시트에서 필요한 설정값 읽어오기
OPENAI_API_KEY = ThisWorkbook.Sheets("설정").Range("b1").Value ' API 키
modelName = ThisWorkbook.Sheets("설정").Range("b2").Value ' 모델명
maxTokens = CInt(ThisWorkbook.Sheets("설정").Range("b3").Value) ' 최대 토큰 수
' ===========================
' 입력값 검증
' ===========================
' 이미지 URL이 비어있는지 확인
If imageUrl = "" Then
GPTImage = "이미지Url이 없습니다." ' 이미지 URL이 없으면 경고 메시지 반환
Exit Function
End If
' ===========================
' API 요청 URL 설정
' ===========================
apiUrl = "https://api.openai.com/v1/chat/completions" ' OpenAI API 엔드포인트
' ===========================
' 이미지 URL 형식 검증
' ===========================
' URL이 http 또는 https로 시작하는지 확인
If Not imageUrl Like "http*" Then
GPTImage = "올바른 형식의 이미지 URL이 아닙니다." ' 잘못된 URL 경고
Exit Function
End If
' ===========================
' API 요청을 위한 JSON payload 생성
' ===========================
' OpenAI에 보낼 요청 데이터(JSON) 구성
payload = "{""model"":""" & modelName & """,""messages"":[{""role"":""user"",""content"":[{""type"":""text"",""text"":""" & prompt & """},{""type"":""image_url"",""image_url"":{""url"":""" & imageUrl & """}}]}],""max_tokens"":" & maxTokens & "}"
' ===========================
' API 요청 (HTTP POST)
' ===========================
Set http = CreateObject("MSXML2.XMLHTTP") ' HTTP 객체 생성
http.Open "POST", apiUrl, False ' POST 방식으로 API 열기 (동기 요청)
http.setRequestHeader "Content-Type", "application/json" ' 요청 헤더: JSON 데이터임을 명시
http.setRequestHeader "Authorization", "Bearer " & OPENAI_API_KEY ' 요청 헤더: API 인증 키
http.send payload ' API에 JSON 데이터 전송
' ===========================
' API 응답 처리
' ===========================
response = http.responseText ' API 응답(JSON 형식) 저장
' ===========================
' JSON 응답에서 "content" 추출
' ===========================
Dim contentStart As Long ' "content" 시작 위치
Dim contentEnd As Long ' "content" 종료 위치
Dim content As String ' "content" 내용
On Error GoTo ErrorHandler ' 오류 발생 시 ErrorHandler로 이동
' "content" 시작 위치 찾기
contentStart = InStr(response, """content"":") + Len("""content"":""")
' "content" 끝 위치 찾기
contentEnd = InStr(contentStart, response, """,")
' 응답에서 "content" 부분 추출
If contentStart > 0 And contentEnd > contentStart Then
content = Mid(response, contentStart, contentEnd - contentStart) ' "content" 부분만 추출
content = Replace(content, "\n", vbCrLf) ' 줄바꿈(\n)을 VBA 줄바꿈(vbCrLf)로 변환
GPTImage = content ' 최종 결과 반환
Else
' 유효한 응답이 없는 경우
GPTImage = "API로부터 유효한 응답을 받지 못했습니다."
End If
Exit Function ' 정상 종료
' ===========================
' 오류 처리 루틴
' ===========================
ErrorHandler:
GPTImage = "오류: " & Err.Description & " (코드: " & Err.Number & ")" ' 오류 메시지 반환
End Function
- 어떻게 동작할까?
셀 내용 B1 OpenAI API Key B2 GPT 모델명 B3 최대 응답 길이 (Max Tokens) B4 분석할 이미지 URL - 사용방법
=GPTImage(B4, "뭐 하는 사진이지? 자세히 분석해 주고, 사고발생 대응방안 알려줘")
이렇게 입력하면 아래 사진처럼 GPT가 이미지를 분석하고, 답변해준다.!!
| 어디에 활용할 수 있을까? 생각하기
GPT에 물어보자. 어디에 써먹을지! GPT에게 물어보니 아래와 같이 답변한다.ㅎ
🏢 이미지 분석 GPT VBA 함수를 회사에서 활용할 수 있는 분야 💼
이 함수는 이미지 인식과 분석을 자동화하기 때문에 다양한 분야에서 업무 효율을 크게 향상할 수 있습니다. 다음은 회사에서 이 함수를 활용할 수 있는 구체적인 사례들입니다:
1️⃣ 품질 관리(QA) 및 불량 검수
활용 예시설명
📸 제품 사진 자동 분석 | 생산 라인에서 찍은 제품 사진을 AI로 분석해 결함 여부를 자동 보고 |
🏷️ 라벨 및 바코드 검증 | 바코드, QR코드 및 라벨 정보가 올바른지 AI가 자동 체크 |
🔍 표면 스크래치 탐지 | 금속, 유리 등 표면 상태를 사진으로 분석해 불량 여부 판단 |
2️⃣ 마케팅 및 고객 서비스
활용 예시설명
📊 광고 소재 분석 | 광고용 이미지(포스터, 배너 등)에서 포함된 텍스트 및 제품 특징 분석 |
💬 SNS 이미지 분석 | 고객이 SNS에 올린 제품 사용 사진을 분석해 트렌드 파악 |
🌟 상품 리뷰 자동 분석 | 고객이 남긴 상품 리뷰 사진을 분석해 자주 언급되는 제품 특징 요약 |
3️⃣ 인사·총무 및 보안 관리
활용 예시설명
🎓 교육 자료 분석 | 교육용 이미지(안전 수칙 포스터 등) 내용을 분석해 자동 요약 |
🛑 출입자 얼굴 인식 보조 | 출입 기록 사진과 함께 AI가 신원 확인 및 로그 작성 |
🚨 CCTV 이벤트 탐지 | 특정 사진이나 CCTV 캡처 화면의 위험 요소 탐지 (안전모 미착용 등) |
4️⃣ 구매·재고 및 물류 관리
활용 예시설명
📦 제품 식별 및 재고 관리 | 상품 이미지를 분석해 제품명, 모델명 자동 태깅 |
🚚 물류 상태 모니터링 | 운송 중 파손된 제품 사진을 분석해 파손 여부 자동 보고 |
🧾 구매 품목 확인 | 구매한 제품의 사진과 발주서 내용을 비교해 자동 검수 |
5️⃣ IT 및 데이터 분석
활용 예시설명
🧠 이미지 데이터셋 자동 라벨링 | 대량의 이미지 데이터에 대해 자동으로 라벨링 및 설명 생성 |
📊 이미지 분석 리포트 자동화 | 이미지 분석 결과를 엑셀 보고서로 자동 작성 |
⚙️ API 테스트 및 자동화 | AI 이미지 분석 API를 다양한 시나리오로 테스트 |
💡 왜 이 VBA 자동화가 좋은가요?
- 시간 절약: 반복적인 이미지 분석 작업을 빠르게 자동 처리
- 비용 절감: 비싼 전문 프로그램 없이 엑셀과 API만으로 업무 자동화
- 정확성 향상: 사람이 놓칠 수 있는 부분을 AI가 꼼꼼히 분석
- 확장성: 업무에 따라 코드를 쉽게 커스터마이즈 가능
🚀 결론
이 VBA 코드는 제조업, 물류, 마케팅, 품질관리 등 다양한 산업군에서 이미지 분석 업무를 자동화하여 생산성 향상과 운영 비용 절감에 크게 기여할 수 있습니다. 📊🤖✨
특히, 엑셀 기반이라 사용자 교육 부담이 적고, 기존 업무 프로세스와 쉽게 통합할 수 있다는 점이 강점입니다! 😊🚀
참고로
GPT 모델에 따라서 이미지를 분석할 수 없는 모델도 있다. 다른 모델로도 해보고. 토큰양을 늘리고 줄여보고 하면서 답변하는 퀄리티, 속도 등 테스트 해보면 감이 딱! 온다. 엑셀 파일을 첨부하니 한번 시도해 보시길 바란다.
그리고 최근에 중국에서 만든 DeepSeek API는 OpenAI API 보다 훨씬 더 저렴하게 사용할 수 있다고 한다.
이런 식으로 접근하다 보면 이상한거(구글시트 데이터를 웹으로 불러온다던지, 엑셀에 입력한 값을 구글시트로 보낸다던지..) 하고 있다. 그리고 생각해 보니 함수로 만들어서 쓰면 파일을 열 때마다 함수(API 호출)가 실행되니
매크로 버튼이나, 유저폼을 활용해서 쓸데없는 토큰낭비를 줄여볼 수도 있을 것 같다.
아무튼
API를 잘 활용해 보자.
구글시트, 노션 등 다양한 어플리케이션과 데이터를 주고받고 할 수 있다.
AI 시대에 이것저것 많이 시도해본 경험이 곧 경쟁력이 된다.
눈으로만 보지 말고 직접 해보는 것만큼 좋은 공부는 없다. 😁
↓ ↓ ↓ ↓ ↓ ↓ ↓ 파일첨부
끝.