
들어가며
역대급 구직 불경기로 인해, 크리에이터/1인 비즈니스까지 필수 아닌 필수처럼 여겨지는 요즘입니다.
코로나 시즌부터 회사밖 노동자, 플랫폼 근로자같이 다양한 직업 패턴이 나타나기 시작했는데요,
직업유무를 가리지 않고 늘 주시하게 되는 것은 바로 사업계획서 일정이 아닐까 싶습니다.
어떤 날은 상반기에 몰려있다가, 어떤 때에는 하반기에 몰려있다가, 급하게 썼다가 기한이 연장되는 등
일하는 사람으로서 일정에 대한 스트레스를 굉장히 심하게 주는 일로 자리잡고 있죠.
퀄리티와 속도, 두가지를 모두 요구받는 입장이 될수록 과연 사람이 이걸 다 할 수 있을지에 대한 막막함이 꽤나 클 것이라고 생각합니다.
AI를 의심해왔고, 지금도 의심하는 저 또한 오롯이 스스로 써보겠다는 일념으로 부딪혀보면 ‘계속 이런 식으로 일하면 진짜 큰일나겠다’ 는 아찔함을 느끼곤 합니다.
지원서 작성하고 업로드하는데 걸리는 시간은 물론, 중간의 복잡한 절차들 때문에 힘들여 쓴 내 파일이 마감기한을 놓쳐버린다면 그만한 스트레스는 또 이루 말할 수 없죠.
한번이라도 더 시도를 해봐도 모자랄 타이밍에, 시도의 기회조차 날려버리는 일이 없게 하기 위해서라도 AI를 활용하는 것의 의미는 충분할 것입니다.
앞선 포스팅에서 살펴봤듯, 챗GPT에게 사업계획서 초안 작성을 위한 논리적인 순서에 대해 물은 뒤, 세부 코드를 작성한 다음 MS 워드의 VBA를 입력한 다음 서식까지 완성하는 흐름을 진행해보겠습니다.
☎️기업/관공서를 위한 AI교육 문의(클릭)
챗GPT 초안 구성
우선, 챗GPT 챗봇 안에 파이썬을 통한 자동입력은 어느정도 가능하기 때문에 기본적인 서식까지 명령할 수는 있습니다.
즉, 사업계획서 초안 작성 명령하고 > 양식 파일을 첨부해서 그 안에 맞게 내용들을 채워달라는 파이썬 코딩까지도 할 수 있다는 것이죠.
어떻게 보면 나쁘진 않습니다.
대신 표를 입력할 때 셀 병합이 이뤄진 일부 개행에 대한 인식이 정확하진 않다는 점은 주의가 필요하겠죠.
초안 텍스트는 어느정도 만들지만, 본문을 그대로 입력하는 파이썬 코딩까지 요청하는 것은 사실상 무리인 셈이죠.
이럴 때를 대비해, 초안은 챗GPT에서 얻어내고 워드파일에 입력한 뒤 VBA로 동기화시켜보겠습니다.
VBA를 수행하기 위해 단계별로 진행할 것들
단계 | 설명 | 예시 |
① 위치 파악 | 표 셀, 단락, 제목 등 위치 지정 | Tables, Selection.Find |
② 내용 삽입 | 지정 위치에 Text 삽입 | .Range.Text = “내용” |
③ 서식 유지 | 기존 서식 그대로 둠 | Font, Alignment 자동 유지 |
④ 실행 | Alt + F8 or 버튼 | 사용자 매크로 실행 |
여러 포스팅에서도 계속해서 강조해서 말씀드리다시피,
저는 GPT에게 과정을 묻거나 논리적인 글쓰기를 위주로 명령하고 있습니다.
다른 LLM들에 비해 최대한 저에게 옹호하는 입장의 답변을 하려는 성향이 있기 때문에,
그 답변구조를 따졌을 때 가장 적합하게 활용할 수 있는 방법을 선택합니다.
초안으로 작성한 내용을 곧바로 바꾸느냐
양식 파일을 불러온 다음, GPT가 만들어낸 초안을 그대로 입력하게 만드느냐의 경우가 있는데
여기서는 양식 파일에 직접 초안을 덧씌워보는 방법을 쓰겠습니다.
자동화가 가능한 영역인지 파악하는 VBA 코드
Sub 문서테이블정보확인()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim tbl As Table
Dim cellContent As String
Debug.Print”========== 문서 테이블 정보 요약 ==========”
Debug.Print”총 테이블 수: “&ActiveDocument.Tables.Count
Debug.Print”—————————————“
For i=1To ActiveDocument.Tables.Count
Set tbl=ActiveDocument.Tables(i)
Debug.Print”테이블 “&i&”: “&tbl.Rows.Count&”행, “&tbl.Columns.Count&”열”
‘ 첫 번째 행과 첫 번째 열의 내용 샘플 출력
Debug.Print” – 첫 번째 행 내용 샘플:”
For j=1To tbl.Columns.Count
If j<=5Then ‘ 처음 5개 열만 표시
On Error Resume Next
cellContent=tbl.Rows(1).Cells(j).Range.Text
‘ 오류 확인
If Err.Number<> 0 Then
cellContent = “[셀 접근 오류]”
Err.Clear
End If
On Error GoTo 0
‘ 마지막 두 문자(셀 마커) 제거
If Len(cellContent) > 2 Then
cellContent = Left(cellContent, Len(cellContent) – 2)
End If
‘ 너무 긴 내용은 자르기
If Len(cellContent) > 30 Then
cellContent = Left(cellContent, 27) & “…”
End If
Debug.Print ” 열 ” & j & “: ” & cellContent
End If
Next j
Debug.Print “—————————————“
Next i
Debug.Print “Immediate 창(Ctrl+G)에서 모든 테이블 정보를 확인하세요.”
MsgBox “테이블 정보가 Immediate 창에 출력되었습니다. Ctrl+G를 눌러 확인하세요.”, vbInformation
End Sub
이후 확인 경과
hwp로 작성된 파일이었던만큼 상당수가 제대로 인식을 하지 못하고 있습니다.
일반적인 테이블로 인식하는 코드에 대해서
Sub 추진일정_테이블_채우기()
Dim tbl As Table
Dim found As Boolean
found=False
‘ 추진일정 테이블 찾기 – “추진내용” 텍스트로 식별
For Each tbl In ActiveDocument.Tables
Dim cellText As String
On Error Resume Next
cellText=tbl.Cell(1, 1).Range.Text
On Error GoTo 0
If InStr(cellText, “추진내용”)>0Then
found=True
Exit For
End If
Next tbl
If found Then
‘ 테이블이 최소 5행, 3열이 있다고 가정
If tbl.Rows.Count>=5And tbl.Columns.Count>=3Then
‘ 첫 번째 내용 행
tbl.Cell(2, 1).Range.Text=”시제품 보완”
tbl.Cell(2, 2).Range.Text=”2025.04.01 ~ 2025.05.10″
tbl.Cell(2, 3).Range.Text=”IoT 센서 최적화 및 기기 안정성 확보”
‘ 두 번째 내용 행
tbl.Cell(3, 1).Range.Text=”커뮤니티 베타 운영”
tbl.Cell(3, 2).Range.Text=”2025.05.11 ~ 2025.06.30″
tbl.Cell(3, 3).Range.Text=”3개 아파트 단지 대상 시범 운영”
‘ 세 번째 내용 행
tbl.Cell(4, 1).Range.Text=”환경 교육 프로그램 제작”
tbl.Cell(4, 2).Range.Text=”2025.07.01 ~ 2025.07.31″
tbl.Cell(4, 3).Range.Text=”초등 커리큘럼 연계 자료 개발”
MsgBox “추진일정 테이블 작업 완료!”, vbInformation
Else
MsgBox “추진일정 테이블의 행 또는 열이 부족합니다.”, vbExclamation
End If
Else
MsgBox “추진일정 테이블을 찾을 수 없습니다.”, vbExclamation
End If
End Sub
/코드
행과 열 기준으로 정확한 위치를 계산해내서 정보들을 입력하는 경향이 있습니다.
그 외에 안정성 측면에서 우수한 방법들을 추가로 찾아보면 다음과 같습니다.
대화형으로 항목당 버튼클릭으로 파일 완성
Option Explicit
‘ 3-2. 창업아이템의 시장분석 및 경쟁력 확보방안
userReady = MsgBox(“3-2. 창업아이템의 시장분석 및 경쟁력 확보방안 섹션을 찾아 내용을 입력할 위치에 커서를 놓고 확인을 클릭하세요.”, _
vbInformation + vbOKCancel)
If userReady <> vbOK Then Exit Sub
Selection.TypeText “O” & vbCrLf & _
“- 경쟁 제품 대비 설치 공간/비용 효율 우수, 비전문가 사용성 강화” & vbCrLf & _
“- 공공기관 대상 납품 및 교육기관 제휴를 통한 초기 시장 진입 전략 확보” & vbCrLf & _
vbCrLf & _
“O” & vbCrLf & _
“- 데이터 기반 식물 생장 알고리즘 자체 개발로 기술 경쟁력 확보”
userReady = MsgBox(“3-2 섹션 입력이 완료되었습니다. 3-3 섹션으로 계속하시겠습니까?”, vbQuestion + vbYesNo)
If userReady <> vbYes Then
Exit Sub
End If
‘ 3-3. 창업아이템의 소상공인 파급 효과
userReady = MsgBox(“3-3. 창업아이템의 소상공인 파급 효과 섹션을 찾아 내용을 입력할 위치에 커서를 놓고 확인을 클릭하세요.”, _
vbInformation + vbOKCancel)
If userReady <> vbOK Then Exit Sub
Selection.TypeText “O” & vbCrLf & _
“- 원예·농업 관련 소상공인과 키트 제작, 유통, 유지보수 연계 가능” & vbCrLf & _
“- 커뮤니티 단위 운영을 통해 도시농업 기반 소상공인 생태계 조성 가능” & vbCrLf & _
vbCrLf & _
“O” & vbCrLf & _
“- 지역 농산물 연계 및 소비 촉진을 통한 농가 소득 증대 기여”
MsgBox “창업아이템 성장가능성 섹션이 완료되었습니다.”, vbInformation
On Error GoTo 0
End Sub
‘ 자금조달계획 채우기
Sub 채우기_자금조달계획()
On Error Resume Next
Dim userReady As VbMsgBoxResult
MsgBox “이제 자금조달계획 섹션을 채우겠습니다.” & vbCrLf & _
“내용을 입력할 위치에 커서를 놓고 확인을 누르세요.”, vbInformation
‘ 4. 자금조달계획
userReady = MsgBox(“4. 자금조달계획 섹션을 찾아 내용을 입력할 위치에 커서를 놓고 확인을 클릭하세요.”, _
vbInformation + vbOKCancel)
If userReady <> vbOK Then Exit Sub
Selection.TypeText “O” & vbCrLf & _
“- 총 예상 소요 비용: 9,000만원” & vbCrLf & _
” * 시제품 및 생산비: 3,000만원” & vbCrLf & _
” * 마케팅 및 커뮤니티 운영비: 3,000만원” & vbCrLf & _
” * 교육 콘텐츠 개발비: 1,500만원” & vbCrLf & _
” * 홈페이지/플랫폼 고도화: 1,500만원” & vbCrLf & _
vbCrLf & _
“O” & vbCrLf & _
“- 자기자본 4,000만원 / 외부 투자유치 3,000만원 / 정부지원금 2,000만원 활용 예정”
MsgBox “자금조달계획 섹션이 완료되었습니다.”, vbInformation
On Error GoTo 0
End Sub
/코드
이런식으로, 예/아니오, 커서를 원하는 자리에 올려놓으면 소제목과 세부번호 코드를 입력하면 본문이 블럭 단위로 옮겨지는 방식을 취합니다.
문단별 필요한 문구들이 대화형 파일로 생성되었고, 챕터에 맞는 번호를 입력하면서 한 문단이 통째로 삽입되는 것을 확인할 수 있었습니다.
다만 주의할 것은 띄어쓰기 등과 같이 기존의 파일에서 지정된 서식을 어느정도 고치고 나서 vba 코드를 만들어야 오류가 줄어드는 이슈가 있었습니다.
대화형 제작 프로그램을 짜는 데에도 걸리는 시간이 적지 않았으나, 최소한 처음부터 모든 항목을 포맷팅하고 편집하는데 걸리는 것은 문자 그대로 2~3일을 밤새는 경우가 훨씬 흔했습니다.
혼자서 컨텐츠 개발과 사업계획서까지 쓰시는 분들께는 조금이나마 힘이 되는 방식의 작업 구조가 될거라 생각하며 이만 글을 줄이겠습니다.
저를 위한 표준사업계획서 포맷이 만들어진 것을 보셨겠지만, 각자에게 맞춤형 프로그램을 만들기 위해서는 별도의 커스터마이제이션이 필요할 것입니다.
관심있으신 분들은 문의를 통해 각자에게 맞는 커스텀된 MS 오피스를 가져보세요 🙂