본문 바로가기
카테고리 없음

엑셀에서 ChatGPT API를 이용하여 GPT함수 만들기

by 아로리 저장소 2023. 10. 28.
728x90

ChatGPT가 나오면서 업무에 많은 편리함을 가지게 되었고 이것을 더 확장할 수 있지 않을까? 생각하다가  ChatGPT를 만든 회사 OpenAI에서 GPT를 사용할 수 있는 API를 제공하고 있어 엑셀에 ChatGPT에게 물어보고 답변을 얻는 함수를 만들어 보았고 이를 공유합니다.

사전준비

OpenAI 회원가입과 카드등록 그리고 접근키 발급

  • ChatGPT API를 사용하려면 우선 OpenAI사이트에 회원가입을 하고 카드를 등록해야 합니다. 
  • 카드등록을 마치면 크래딧을 구매하거나 결제가 될 수 있게 합니다. 
  • 그리고 OpenAI API에 접근할 수 있는 API 키를 발급 받아야 합니다 
  • https://platform.openai.com

카드등록화면

회원 가입 후 카드등록

API Key 발급화면

API 발급

ChatGPT함수 형태

  • 함수는 엑셀에서 제공하고 있는 VBA를 통해서 개발합니다.
  • 함수 형태
    • CallChatGPT( target, ask) 
    • 함수 형태는 총 2개의 파라미터로 이뤄집니다. 
    • target: 보기
    • ask:  target(보기)에 대한 질문 

 

개발 도구 활성화 

엑셀에서 ChatGPT 함수를 만들기 위해서는 비주얼 베이직 코드로 함수를 만들 수 있는 VBA를 활성화 해야합니다. 

우선 탭 메뉴에 없는 개발 도구 탭을 활성화 시켜봅시다. 

 

파일 메뉴 - 옵션메뉴클릭 

왼쪽 상단에 리본메뉴에서 "파일" 를 클릭하고 사이드 메뉴가 뜨면 하단에 "옵션"을 클릭합니다.

 

리본 사용자 지정 - 개발 도구 체크 

Excel 옵션 창이 뜨면 왼쪽에 메뉴에서 "리본 사용자 지정"을 클릭 하고 오른쪽 창에서 리본 메뉴 사용자 지정에서 "개발 도구"를 체크하고 확인을 눌러주세요.

 

이제 리본 메뉴에 "개발 도구"가 생긴것을 확인할 수 있습니다. 

 

ChatGPT함수 모듈 만들기를 위한 개발창 띄우기 

이제 함수를 만들기 위해서 VBA 개발창을 띄워야 합니다. (VBA공식 명칭은 Vitual Basic Application 입니다.) 

우선 엑셀 창을 띄우고 Alt + F11키를 눌러줍니다. 또는 "개발도구" - "Visual Basic"를 클릭 합니다. 

 

새로운 창이 뜨면서 VBA개발창이 뜹니다. 

 

모듈 폴더 만들기 

왼쪽 사이드에 VBA Project창에서 마우스오른쪽 버튼을 클릭하여 "삽입" - "모듈" 을 클릭하면 폴더가 생성되고 왼쪽에 통합문서 모듈 개발창이 뜹니다.

 

JsonConverter.bas 파일 가져와서 사용 준비하기

파일 준비

엑셀 VBA에서는 Json이라는 형태의 양식으로 된 데이터를 다루려면(파싱) JsonConvert라는 모듈을 가져와야합니다. 해당 파일은 공식 사이트 또는 제가 올린 파일에서 다운받아서 사용하시면 됩니다.
(공식사이트에서 다운 받아서 압축을 풀면 JsonConverter.bas 파일이 있습니다.)

 

공식사이트

https://github.com/VBA-tools/VBA-JSON/tags

파일

 

JsonConverter.bas
0.04MB

 

VBA로 파일 가져오기 

VBA창에 왼쪽 project 창에서 오른쪽 버튼을 누르고 파일 가져오기를 통해서 JsonConverter.bas 파일을 선택해줍니다. 

 

파일을 추가하면 모듈 폴더에 나타납니다. 

 

참조에서 "Microsoft Scripting Runtime" 추가

추가한 JsonConverter.bas 모듈을 사용하려면 Microsoft Scripting Runtime을 추가해야합니다.

 

추가방법은 메뉴에 도구 - 참조 를 클릭합니다.

창이 뜨면 Microsoft Scripting Runtime 을 찾아서 선택해줍니다. 

 

소스코드 입력

이제 다음 소스코드를 모듈 창에 붙여 넣기 해주세요.  

apikey에 OpenAI에서 가져온 API Key를 꼭 Bearer 추가해주세요 

 

Function CallChatGPT(target As String, question As String) As String
    Dim xml As Object
    Dim responseText As String
    Dim URL As String
    Dim apikey As String
    
    Dim jsonResponse As Object
    Dim choices As Object
    Dim message As Object
    Dim content As String
    
    Dim sp() As String
    Dim result As String
    Dim trimmedResult As String
    
        ' --변수 선언--
        ' URL
        URL = "https://api.openai.com/v1/chat/completions"
        ' API KEY
        ' 여기에 API키를 입력해주세요.
        ' API키 앞에 Bearer 를 붙여 띄어주세요"
        ' 예, Bearer sk-...
        apikey = "Bearer sk-..."
        
    
        ' XMLHTTP 객체 생성
        Set xml = CreateObject("MSXML2.ServerXMLHTTP")
    
        ' POST 요청 보내기
        xml.Open "POST", URL, False
    
        ' 헤더 추가
        xml.setRequestHeader "Content-Type", "application/json"
        xml.setRequestHeader "Authorization", apikey
        
        
        ' 요청 본문 설정
        Dim requestBody1 As String
        requestBody1 = "{""model"": ""gpt-3.5-turbo"", ""messages"": [{""role"": ""system"", ""content"": ""저는 한국어로 답변드릴게요.""}, {""role"": ""user"", ""content"": ""보기에 대한 질문:" & question & ", 보기: " & target & """}]}"
    
        xml.send requestBody1
    
        ' 응답 데이터 가져오기
        responseText = xml.responseText

        ' 전처리
        Dim Json As Object
        
        Set Json = JsonConverter.ParseJson(responseText)
        ' MsgBox Json("choices")(1)("message")("content")
        

        ' 함수 결과 반환
       CallChatGPT = Json("choices")(1)("message")("content")
       
End Function

 

CallChatGPT함수 사용해보기

이제 엑셀에서 해당 함수를 써봅시다. VBA창에서 왼쪽 상단에 엑셀 아이콘을 눌러주면 엑셀화면으로 전환 됩니다. 

 

다음은 예시로 준비한 화면입니다. 

먼저 보기항목과 질문 항목을 만들어줍니다. 그리고 CallChatGPT 함수이용해서 target과 ask에 맞춰 셀을 선택해주세요 

 

결과는 어떻게 나왔을까요?

답변내용이 너무 깁니다.  질문에 답변 내용을 추가하여 예/아니오로 만들어봅시다. 

 

이제 다른 수들도 기존 엑셀 기능을 이용해서 다 적용해봅시다.
이때 질문에 대해서 절대참조를 해주셔야합니다.

부연설명을 하지 말라고 했는데도 부연설명은 해주네요. 질문을 더 세세히 적어주면 되지 않을까 싶네요. 

자 이렇게 ChatGPT API를 이용해서 난이도 있는 문제처리를 할 수 있는 함수를 만들어 보았습니다. 하시다가 모르시거나 다른 질문 있으면 언제든지 댓글 남겨주세요!!

 

728x90