목록으로
📊 AI와 비즈니스 - 엑셀

GPT 활용한 엑셀 매크로 작성 - VBA 없이 AI로 자동화하기

VBA 코딩 몰라도 괜찮아요! AI가 반복 작업을 자동화하는 매크로 코드를 작성해드립니다.

IF문, VLOOKUP 자동 작성

IF문과 VLOOKUP, 이름만 들어도 머리 아프시죠? 엑셀에서 가장 많이 쓰이는 함수들인데, 동시에 가장 헷갈리는 함수들이기도 해요.

IF문은 조건이 하나일 땐 괜찮은데, 여러 조건을 중첩하다 보면 괄호가 어디서 닫히는지도 모르겠고 오류도 자주 나요. VLOOKUP은 인수 순서도 헷갈리고, FALSE는 언제 쓰고 TRUE는 언제 쓰는지도 헷갈립니다.

AI를 활용하면 이런 복잡한 함수도 쉽게 만들 수 있어요. 원하는 조건만 자연스럽게 설명하면, AI가 완벽한 IF문을 만들어줍니다. VLOOKUP도 "어디서 뭘 찾아서 뭘 가져와"라고 말하면 끝이에요.

이번 글에서는 AI로 IF문과 VLOOKUP을 자동으로 작성하는 방법을 알아봅니다. 간단한 조건식부터 복잡한 중첩 IF문, 오류 처리까지 모두 다루어볼게요.

1. 단순 IF문 자동 생성

기본 IF문

AI 프롬프트:

"점수가 60점 이상이면 '합격', 아니면 '불합격'으로 표시하세요."

AI 생성 수식:

=IF(B2>=60, "합격", "불합격")

다중 조건 IF문

AI 프롬프트:

"점수에 따라 등급을 매기세요:
- 90점 이상: A
- 80점 이상: B
- 70점 이상: C
- 60점 이상: D
- 그 외: F"

AI 생성 수식:

=IF(B2>=90, "A",
   IF(B2>=80, "B",
      IF(B2>=70, "C",
         IF(B2>=60, "D", "F"))))

// 또는 IFS 함수 사용 (Excel 2016 이상)
=IFS(
   B2>=90, "A",
   B2>=80, "B",
   B2>=70, "C",
   B2>=60, "D",
   TRUE, "F"
)

2. 복합 조건 IF문

AND 조건

AI 프롬프트:

"출석률이 80% 이상이고, 점수가 70점 이상이면 '수료',
하나라도 미달이면 '미수료'로 표시하세요."

AI 생성 수식:

=IF(AND(B2>=80, C2>=70), "수료", "미수료")

// 또는
=IF((B2>=80)*(C2>=70), "수료", "미수료")

OR 조건

AI 프롬프트:

"결제 방법이 '신용카드' 또는 '체크카드'면 '카드결제',
아니면 '현금결제'로 분류하세요."

AI 생성 수식:

=IF(OR(D2="신용카드", D2="체크카드"), "카드결제", "현금결제")

// 또는
=IF((D2="신용카드")+(D2="체크카드"), "카드결제", "현금결제")

복잡한 조건 조합

AI 프롬프트:

"직원의 인센티브를 계산하세요:
- 영업팀이면서 목표 120% 이상 달성: 기본급의 30%
- 영업팀이면서 목표 100% 이상 달성: 기본급의 20%
- 영업팀이면서 목표 80% 이상 달성: 기본급의 10%
- 그 외 부서는 목표 100% 이상 달성 시: 기본급의 10%
- 나머지: 0"

AI 생성 수식:

=IF(AND(A2="영업팀", C2>=1.2), B2*0.3,
   IF(AND(A2="영업팀", C2>=1.0), B2*0.2,
      IF(AND(A2="영업팀", C2>=0.8), B2*0.1,
         IF(AND(A2<>"영업팀", C2>=1.0), B2*0.1, 0))))

3. VLOOKUP 기본

단순 VLOOKUP

AI 프롬프트:

"A열의 직원번호로 '직원정보' 시트에서 직원 이름을 찾아주세요.
찾지 못하면 '미등록'이라고 표시하세요."

AI 생성 수식:

=IFERROR(
   VLOOKUP(A2, 직원정보!$A:$D, 2, FALSE),
   "미등록"
)

// 또는 IFNA 사용
=IFNA(
   VLOOKUP(A2, 직원정보!$A:$D, 2, FALSE),
   "미등록"
)

여러 열 참조

AI 프롬프트:

"제품코드로 제품명(2열), 단가(3열), 재고(4열)를 한번에 가져오세요."

AI 생성 수식:

// B열: 제품명
=VLOOKUP($A2, 제품DB!$A:$E, 2, FALSE)

// C열: 단가
=VLOOKUP($A2, 제품DB!$A:$E, 3, FALSE)

// D열: 재고
=VLOOKUP($A2, 제품DB!$A:$E, 4, FALSE)

// 또는 하나의 배열 수식으로 (Ctrl+Shift+Enter)
=VLOOKUP($A2, 제품DB!$A:$E, {2,3,4}, FALSE)

4. VLOOKUP 고급 활용

근사값 찾기

AI 프롬프트:

"매출액에 따른 수수료율을 찾으세요:
- 0~1천만원: 5%
- 1천만원~5천만원: 3%
- 5천만원~1억원: 2%
- 1억원 이상: 1%"

AI 생성 수식:

// 수수료표 시트:
   A           B
0          5%
10000000   3%
50000000   2%
100000000  1%

// 수식 (TRUE: 근사값)
=VLOOKUP(B2, 수수료표!$A:$B, 2, TRUE)

// 또는 직접 배열로
=VLOOKUP(B2, {0,0.05;10000000,0.03;50000000,0.02;100000000,0.01}, 2, TRUE)

왼쪽 열 참조 (INDEX-MATCH)

AI 프롬프트:

"VLOOKUP은 왼쪽 열을 참조할 수 없다고 하는데,
제품명(C열)으로 제품코드(A열)를 찾고 싶어요."

AI 생성 수식:

// INDEX-MATCH 조합 사용
=INDEX(제품DB!$A:$A, MATCH(C2, 제품DB!$C:$C, 0))

// 또는 XLOOKUP (Microsoft 365)
=XLOOKUP(C2, 제품DB!$C:$C, 제품DB!$A:$A, "없음")

다중 조건 VLOOKUP

AI 프롬프트:

"지역과 제품명이 모두 일치하는 매출을 찾아주세요."

AI 생성 수식:

// 헬퍼 열(A열) 생성: 지역&제품명
=B2&"|"&C2

// VLOOKUP 수식
=VLOOKUP(
   $B2&"|"&$C2,
   매출DB!$A:$D,
   4,
   FALSE
)

// 또는 INDEX-MATCH로 헬퍼 열 없이
=INDEX(매출DB!$D:$D,
   MATCH(1,
      (매출DB!$B:$B=$B2)*(매출DB!$C:$C=$C2),
      0))

5. VBA로 복잡한 조건식 자동 생성

IF문 자동 생성기

AI 프롬프트:

"사용자가 입력한 조건들을 기반으로
IF문을 자동으로 생성해주는 도구를 만들어주세요."

AI 생성 VBA:

Sub IF문자동생성기()
    Dim conditionCount As Integer
    Dim i As Integer
    Dim formula As String
    Dim condition As String
    Dim result As String

    ' 조건 개수 입력
    conditionCount = InputBox("몇 개의 조건을 만드시겠습니까?", "조건 개수", 3)

    formula = "=IF("

    For i = 1 To conditionCount
        condition = InputBox("조건 " & i & "을 입력하세요." & vbCrLf & _
                           "예: A1>=90", "조건 입력")
        result = InputBox("조건 " & i & "이 참일 때 결과를 입력하세요.", "결과 입력")

        If i = 1 Then
            formula = formula & condition & ',"' & result & '",'
        Else
            formula = formula & "IF(" & condition & ',"' & result & '",'
        End If
    Next i

    ' 마지막 거짓 조건
    result = InputBox("모든 조건이 거짓일 때 결과를 입력하세요.", "기본값 입력")
    formula = formula & '"' & result & '"'

    ' 괄호 닫기
    For i = 1 To conditionCount - 1
        formula = formula & ")"
    Next i
    formula = formula & ")"

    ' 결과 표시
    MsgBox "생성된 수식:" & vbCrLf & vbCrLf & formula, vbInformation

    ' 클립보드에 복사
    Dim dataObj As Object
    Set dataObj = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    dataObj.SetText formula
    dataObj.PutInClipboard

    MsgBox "수식이 클립보드에 복사되었습니다.", vbInformation
End Sub

VLOOKUP 빌더

AI 프롬프트:

"VLOOKUP 수식을 대화형으로 생성해주는 도구를 만들어주세요."

AI 생성 VBA:

Sub VLOOKUP빌더()
    Dim lookupValue As String
    Dim tableRange As String
    Dim columnIndex As Integer
    Dim exactMatch As Boolean
    Dim errorHandling As String
    Dim formula As String

    ' 사용자 입력
    lookupValue = InputBox("찾을 값의 셀 주소를 입력하세요." & vbCrLf & _
                          "예: A2", "찾을 값", "A2")

    tableRange = InputBox("검색할 범위를 입력하세요." & vbCrLf & _
                         "예: 직원정보!$A:$D", "검색 범위", "Sheet1!$A:$D")

    columnIndex = InputBox("반환할 열 번호를 입력하세요." & vbCrLf & _
                          "예: 2 (두 번째 열)", "열 번호", 2)

    exactMatch = (MsgBox("정확히 일치하는 값만 찾으시겠습니까?" & vbCrLf & _
                        "예(완전일치) / 아니오(근사값)", _
                        vbYesNo + vbQuestion, "일치 유형") = vbYes)

    errorHandling = InputBox("값을 찾지 못했을 때 표시할 내용을 입력하세요." & vbCrLf & _
                            "예: 미등록", "오류 처리", "미등록")

    ' 수식 생성
    formula = "=IFERROR(" & _
              "VLOOKUP(" & lookupValue & "," & tableRange & "," & _
              columnIndex & "," & IIf(exactMatch, "FALSE", "TRUE") & ")" & _
              ',"' & errorHandling & '")'

    ' 결과 표시 및 복사
    MsgBox "생성된 수식:" & vbCrLf & vbCrLf & formula, vbInformation

    Dim dataObj As Object
    Set dataObj = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    dataObj.SetText formula
    dataObj.PutInClipboard

    MsgBox "수식이 클립보드에 복사되었습니다." & vbCrLf & _
           "원하는 셀에 붙여넣기(Ctrl+V) 하세요.", vbInformation
End Sub

6. 실무 예제: 급여 계산

AI 프롬프트:

"다음 조건으로 급여를 계산하세요:

기본급 + 수당:
- 직급이 '부장' 이상: 50만원
- 직급이 '과장': 30만원
- 직급이 '대리' 이하: 20만원

야근수당:
- 야근시간 × 15,000원

가족수당:
- 부양가족 1명당 10만원

총 급여에서 세금 3.3% 차감"

AI 생성 수식:

// D열: 직급수당
=VLOOKUP(C2, {
   "부장", 500000;
   "차장", 500000;
   "과장", 300000;
   "대리", 200000;
   "사원", 200000
}, 2, FALSE)

// E열: 야근수당
=G2*15000

// F열: 가족수당
=H2*100000

// I열: 총 지급액
=B2+D2+E2+F2

// J열: 세금
=I2*0.033

// K열: 실수령액
=I2-J2

VBA로 자동화:

Sub 급여계산_자동화()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long

    Set ws = ThisWorkbook.Sheets("급여명세")
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    Application.ScreenUpdating = False

    For i = 2 To lastRow
        ' 직급수당
        Select Case ws.Cells(i, 3).Value ' C열: 직급
            Case "부장", "차장"
                ws.Cells(i, 4).Value = 500000
            Case "과장"
                ws.Cells(i, 4).Value = 300000
            Case "대리", "사원"
                ws.Cells(i, 4).Value = 200000
            Case Else
                ws.Cells(i, 4).Value = 0
        End Select

        ' 야근수당
        ws.Cells(i, 5).Value = ws.Cells(i, 7).Value * 15000

        ' 가족수당
        ws.Cells(i, 6).Value = ws.Cells(i, 8).Value * 100000

        ' 총 지급액
        ws.Cells(i, 9).Value = ws.Cells(i, 2).Value + _
                                ws.Cells(i, 4).Value + _
                                ws.Cells(i, 5).Value + _
                                ws.Cells(i, 6).Value

        ' 세금
        ws.Cells(i, 10).Value = ws.Cells(i, 9).Value * 0.033

        ' 실수령액
        ws.Cells(i, 11).Value = ws.Cells(i, 9).Value - ws.Cells(i, 10).Value
    Next i

    Application.ScreenUpdating = True

    MsgBox "급여 계산이 완료되었습니다.", vbInformation
End Sub

7. 동적 범위 VLOOKUP

AI 프롬프트:

"데이터가 추가되어도 자동으로 범위가 확장되는
VLOOKUP 수식을 만들어주세요."

AI 생성 방법:

// 방법 1: 테이블 사용
1. 데이터 범위를 테이블로 변환 (Ctrl+T)
2. 테이블명: 직원테이블
3. VLOOKUP 수식:
=VLOOKUP(A2, 직원테이블, 2, FALSE)

// 방법 2: OFFSET 함수 사용
// 이름 관리자에서 동적 범위 정의
이름: 동적직원데이터
참조: =OFFSET(직원정보!$A$1,0,0,
         COUNTA(직원정보!$A:$A),4)

// VLOOKUP 수식
=VLOOKUP(A2, 동적직원데이터, 2, FALSE)

// 방법 3: INDIRECT 사용
=VLOOKUP(A2,
   INDIRECT("직원정보!$A$1:$D$"&
      COUNTA(직원정보!$A:$A)),
   2, FALSE)

8. VLOOKUP 대체: XLOOKUP

AI 프롬프트:

"Microsoft 365의 XLOOKUP을 사용해서
더 강력한 조회 수식을 만들어주세요."

AI 생성 수식:

// 기본 XLOOKUP
=XLOOKUP(A2, 직원정보!$A:$A, 직원정보!$B:$B)

// 왼쪽 열 참조 가능
=XLOOKUP(C2, 직원정보!$C:$C, 직원정보!$A:$A)

// 여러 값 동시 반환
=XLOOKUP(A2, 직원정보!$A:$A, 직원정보!$B:$E)

// 근사값 찾기 (이상/이하)
=XLOOKUP(B2, 수수료표!$A:$A, 수수료표!$B:$B,, 1)

// 역순 검색 (마지막 항목 찾기)
=XLOOKUP(A2, 거래내역!$A:$A, 거래내역!$C:$C,, 0, -1)

// 와일드카드 검색
=XLOOKUP("*"&A2&"*", 제품명!$A:$A, 제품명!$B:$B,, 2)

9. 복잡한 중첩 수식 디버깅

AI 프롬프트:

"이 수식이 #VALUE! 오류가 나는데 무엇이 문제인가요?
=IF(AND(VLOOKUP(A2,데이터!$A:$C,2,FALSE)>100,
   VLOOKUP(A2,데이터!$A:$C,3,FALSE)="Y"),"합격","불합격")"

AI 분석:

문제점:
1. VLOOKUP이 실패하면 #N/A 오류 발생
2. 이 오류가 AND 함수로 전파되어 #VALUE! 발생

해결 방법:

수정된 수식:

=IF(
   AND(
      IFERROR(VLOOKUP(A2,데이터!$A:$C,2,FALSE),0)>100,
      IFERROR(VLOOKUP(A2,데이터!$A:$C,3,FALSE),"")="Y"
   ),
   "합격",
   "불합격"
)

// 또는 변수처럼 사용
=LET(
   값1, VLOOKUP(A2,데이터!$A:$C,2,FALSE),
   값2, VLOOKUP(A2,데이터!$A:$C,3,FALSE),
   IF(AND(값1>100, 값2="Y"), "합격", "불합격")
)

10. 수식 라이브러리 구축

AI 프롬프트:

"자주 사용하는 수식을 저장하고 불러올 수 있는
라이브러리를 만들어주세요."

AI 생성 VBA:

' 새 워크북에 추가할 모듈
Sub 수식라이브러리_열기()
    Dim formulaWb As Workbook
    Dim formulaPath As String

    formulaPath = ThisWorkbook.Path & "\수식라이브러리.xlsx"

    ' 라이브러리 파일이 없으면 생성
    If Dir(formulaPath) = "" Then
        Call 수식라이브러리_생성
    End If

    ' 라이브러리 열기
    Set formulaWb = Workbooks.Open(formulaPath)
    formulaWb.Windows(1).Visible = True
End Sub

Sub 수식라이브러리_생성()
    Dim newWb As Workbook
    Dim ws As Worksheet

    Set newWb = Workbooks.Add
    Set ws = newWb.Sheets(1)
    ws.Name = "수식목록"

    ' 헤더 작성
    ws.Cells(1, 1).Value = "카테고리"
    ws.Cells(1, 2).Value = "수식명"
    ws.Cells(1, 3).Value = "수식"
    ws.Cells(1, 4).Value = "설명"
    ws.Cells(1, 5).Value = "예제"

    ' 샘플 데이터
    ws.Cells(2, 1).Value = "조회"
    ws.Cells(2, 2).Value = "안전한 VLOOKUP"
    ws.Cells(2, 3).Value = "=IFERROR(VLOOKUP(A2,데이터!$A:$C,2,0),"""")"
    ws.Cells(2, 4).Value = "오류 시 빈 값 반환"

    ws.Cells(3, 1).Value = "조건"
    ws.Cells(3, 2).Value = "등급 분류"
    ws.Cells(3, 3).Value = "=IFS(A2>=90,""A"",A2>=80,""B"",A2>=70,""C"",TRUE,""F"")"
    ws.Cells(3, 4).Value = "점수에 따른 등급"

    ' 서식
    ws.Range("A1:E1").Font.Bold = True
    ws.Columns("A:E").AutoFit

    ' 저장
    newWb.SaveAs ThisWorkbook.Path & "\수식라이브러리.xlsx"
    newWb.Close

    MsgBox "수식 라이브러리가 생성되었습니다.", vbInformation
End Sub

Sub 수식_삽입()
    Dim formulaWb As Workbook
    Dim selectedFormula As String
    Dim lastRow As Long
    Dim selectedRow As Long

    ' 라이브러리 열기
    On Error Resume Next
    Set formulaWb = Workbooks("수식라이브러리.xlsx")
    On Error GoTo 0

    If formulaWb Is Nothing Then
        MsgBox "수식 라이브러리를 먼저 여세요.", vbExclamation
        Exit Sub
    End If

    ' 수식 선택
    lastRow = formulaWb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
    selectedRow = Application.InputBox( _
        "삽입할 수식의 행 번호를 입력하세요 (2-" & lastRow & "):", _
        "수식 선택", 2, Type:=1)

    If selectedRow < 2 Or selectedRow > lastRow Then
        MsgBox "잘못된 행 번호입니다.", vbExclamation
        Exit Sub
    End If

    ' 수식 가져오기
    selectedFormula = formulaWb.Sheets(1).Cells(selectedRow, 3).Value

    ' 활성 셀에 삽입
    ActiveCell.Formula = selectedFormula

    MsgBox "수식이 삽입되었습니다.", vbInformation
End Sub

마무리

AI로 IF문과 VLOOKUP 자동화:

  • ✅ 복잡한 조건식도 자연어로 생성
  • ✅ VLOOKUP 빌더로 오류 없는 수식
  • ✅ VBA로 반복 작업 자동화
  • ✅ 수식 라이브러리로 재사용성 향상

다음 글에서는 대량 데이터에서 의미 있는 패턴을 찾는 방법을 알아봅니다.