본문으둜 λ°”λ‘œκ°€κΈ°
검색
νšŒμ›κ°€μž…λ‘œκ·ΈμΈ
page thumbnail

πŸ“ Excel VBA둜 μ˜μ–΄ μ§€λ¬Έ/해석 μ›Œλ“œ λ¬Έμ„œ μžλ™ 생성 (상세 νŠœν† λ¦¬μ–Ό)

λ‹¬μ˜μ΄μ„±
λ‹¬μ˜μ΄μ„±
β€’μ‘°νšŒμˆ˜ 69
μš”μ•½

1단계: μ—‘μ…€ 파일 μ€€λΉ„ν•˜κΈ°

κ°€μž₯ λ¨Όμ € 데이터λ₯Ό λ‹΄κ³  맀크둜λ₯Ό μ‹€ν–‰ν•  μ—‘μ…€ νŒŒμΌμ„ μ€€λΉ„ν•΄μ•Ό ν•©λ‹ˆλ‹€.

  1. 맀크둜 톡합 λ¬Έμ„œλ‘œ μ €μž₯ (⭐가μž₯ μ€‘μš”!)

    • μƒˆ μ—‘μ…€ νŒŒμΌμ„ μ—΄κ³ , μ¦‰μ‹œ [파일] > [λ‹€λ₯Έ μ΄λ¦„μœΌλ‘œ μ €μž₯]을 ν΄λ¦­ν•©λ‹ˆλ‹€.

    • 파일 ν˜•μ‹μ„ Excel 맀크둜 μ‚¬μš© 톡합 λ¬Έμ„œ (*.xlsm)*둜 μ„ νƒν•˜κ³ , 파일 이름은 μ˜μ–΄ μ§€λ¬Έ 생성기.xlsm둜 μ§€μ •ν•˜μ—¬ μ €μž₯ν•©λ‹ˆλ‹€.

    • 이유: 일반 μ—‘μ…€ 파일(.xlsx)은 λ³΄μ•ˆμƒμ˜ 이유둜 맀크둜(VBA μ½”λ“œ)λ₯Ό μ €μž₯ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ°˜λ“œμ‹œ .xlsm ν™•μž₯자둜 μ €μž₯ν•΄μ•Ό μ½”λ“œκ°€ 사라지지 μ•ŠμŠ΅λ‹ˆλ‹€.

  2. 데이터 μž…λ ₯

    • μ—‘μ…€ μ‹œνŠΈμ˜ 첫 번째 ν–‰(A1, B1, C1)에 각각 제λͺ©, μ§€λ¬Έ, 해석이라고 μž…λ ₯ν•©λ‹ˆλ‹€.

    • A2 μ…€λΆ€ν„° μ•„λž˜λ‘œ μ œκ³΅ν•΄μ£Όμ‹  데이터λ₯Ό μ°¨λ‘€λŒ€λ‘œ λ³΅μ‚¬ν•˜μ—¬ λΆ™μ—¬λ„£μŠ΅λ‹ˆλ‹€. (μ•„λž˜ 2개 λ¬Έν•­ μ˜ˆμ‹œ)

ABC
1제λͺ©μ§€λ¬Έν•΄μ„
218번ACC Travel Agency Customers: Have you...ACC 여행사 κ³ κ°λ‹˜κ»˜: μžμ—° μ†μ—μ„œ...
319번When I woke up in our hotel room, it...λ‚΄κ°€ ν˜Έν…” λ°©μ—μ„œ 깨어났을 λ•ŒλŠ”...
............
  1. 맀크둜 μ‹€ν–‰ λ²„νŠΌ λ§Œλ“€κΈ°

    • 상단 λ©”λ‰΄μ—μ„œ [개발 도ꡬ] 탭을 ν΄λ¦­ν•©λ‹ˆλ‹€.

      • λ§Œμ•½ [개발 도ꡬ] 탭이 μ—†λ‹€λ©΄? 파일 > μ˜΅μ…˜ > 리본 μ‚¬μš©μž μ§€μ • λ©”λ‰΄λ‘œ μ΄λ™ν•˜μ—¬ 였λ₯Έμͺ½ λͺ©λ‘μ˜ 개발 도ꡬ에 μ²΄ν¬ν•˜κ³  확인을 λˆ„λ₯΄μ„Έμš”.

    • [개발 도ꡬ] νƒ­μ—μ„œ [μ‚½μž…]을 ν΄λ¦­ν•˜κ³ , 양식 μ»¨νŠΈλ‘€μ— μžˆλŠ” 단좔(λ²„νŠΌ) λͺ¨μ–‘ μ•„μ΄μ½˜μ„ μ„ νƒν•©λ‹ˆλ‹€.

    • μ‹œνŠΈμ˜ λΉ„μ–΄μžˆλŠ” 곡간에 마우슀둜 λ“œλž˜κ·Έν•˜μ—¬ μ λ‹Ήν•œ 크기의 λ²„νŠΌμ„ λ§Œλ“­λ‹ˆλ‹€.

    • 맀크둜 μ§€μ • 창이 λ‚˜νƒ€λ‚˜λ©΄ 일단 [μ·¨μ†Œ]λ₯Ό λˆ„λ¦…λ‹ˆλ‹€.

    • μƒμ„±λœ λ²„νŠΌ μœ„μ—μ„œ 마우슀 였λ₯Έμͺ½ λ²„νŠΌμ„ ν΄λ¦­ν•˜κ³  ν…μŠ€νŠΈ νŽΈμ§‘μ„ 눌러 "μ›Œλ“œ λ¬Έμ„œ 생성" 이라고 이름을 λ°”κΏ”μ€λ‹ˆλ‹€.

(주의) 데이터가 μžˆλŠ” μ˜μ–΄ μ§€λ¬Έ 생성기.xlsm νŒŒμΌμ—μ„œ 

μ•„λž˜ μž‘μ—…μ„ ν•˜μ…”μ•Ό ν•©λ‹ˆλ‹€.

EXCEL_fbTe5uihA1

6pGVI4UmX2


2단계: VBA νŽΈμ§‘κΈ° μ—΄κ³  μ½”λ“œ μž‘μ„±ν•˜κΈ°

이제 μ‹€μ œλ‘œ μ›Œλ“œ λ¬Έμ„œλ₯Ό λ§Œλ“œλŠ” λ§ˆλ²• 같은 μ½”λ“œλ₯Ό μž‘μ„±ν•  μ°¨λ‘€μž…λ‹ˆλ‹€.

  1. VBA νŽΈμ§‘κΈ° μ—΄κΈ°

    • ν‚€λ³΄λ“œμ—μ„œ Alt + F11 ν‚€λ₯Ό λ™μ‹œμ— 눌러 VBA νŽΈμ§‘κΈ°(VBE) 창을 μ—½λ‹ˆλ‹€.

  2. λͺ¨λ“ˆ(Module) μΆ”κ°€ν•˜κΈ°

    • VBA νŽΈμ§‘κΈ°μ˜ λ©”λ‰΄μ—μ„œ [μ‚½μž…] > [λͺ¨λ“ˆ]을 ν΄λ¦­ν•©λ‹ˆλ‹€. 였λ₯Έμͺ½μ— ν•˜μ–€μƒ‰μ˜ 빈 μ½”λ“œ νŽΈμ§‘ 창이 λ‚˜νƒ€λ‚©λ‹ˆλ‹€. μ•žμœΌλ‘œ λͺ¨λ“  μ½”λ“œλŠ” 이 곳에 μž‘μ„±ν•©λ‹ˆλ‹€.

      EXCEL_phnj0Ww5Eu

  3. Word κΈ°λŠ₯ μ‚¬μš© κΆŒν•œ μ–»κΈ° (⭐참쑰 μ„€μ •)

    • 이 λ‹¨κ³„λŠ” 엑셀이 μ›Œλ“œλ₯Ό μ œμ–΄ν•˜κΈ° μœ„ν•΄ λ°˜λ“œμ‹œ ν•„μš”ν•©λ‹ˆλ‹€.

    • λ©”λ‰΄μ—μ„œ [도ꡬ] > [μ°Έμ‘°]λ₯Ό ν΄λ¦­ν•©λ‹ˆλ‹€.

    • μƒˆλ‘œμš΄ 창이 뜨면 μŠ€ν¬λ‘€μ„ λ‚΄λ € Microsoft Word XX.X Object Library ν•­λͺ©μ„ μ°Ύμ•„ μ²΄ν¬ν•˜κ³  [확인]을 λˆ„λ¦…λ‹ˆλ‹€. (XX.XλŠ” μ„€μΉ˜λœ μ˜€ν”ΌμŠ€ 버전에 따라 16.0, 15.0 λ“±μœΌλ‘œ λ‹€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€.)

      EXCEL_4H85AJP9Ob

  4. VBA μ½”λ“œ 볡사 및 λΆ™μ—¬λ„£κΈ°

    • μ•„λž˜μ˜ 전체 μ½”λ“œλ₯Ό λ³΅μ‚¬ν•˜μ—¬ 방금 μ „ μ—΄μ—ˆλ˜ ν•˜μ–€ λͺ¨λ“ˆ 창에 κ·ΈλŒ€λ‘œ λΆ™μ—¬λ„£μŠ΅λ‹ˆλ‹€. μ½”λ“œ 각 μ€„μ˜ 역할은 주석(')에 μƒμ„Ένžˆ μ„€λͺ…λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

' Sub ν”„λ‘œμ‹œμ € μ‹œμž‘: "CreateEnglishDocs" λΌλŠ” μ΄λ¦„μ˜ 맀크둜λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.
Sub CreateEnglishDocs()

    ' === 1. λ³€μˆ˜ μ„ μ–Έ: μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ μ €μž₯ 곡간(λ³€μˆ˜)듀을 λ§Œλ“­λ‹ˆλ‹€. ===
    
    Dim wdApp As Word.Application     ' μ›Œλ“œ ν”„λ‘œκ·Έλž¨ 자체λ₯Ό 담을 λ³€μˆ˜
    Dim wdDoc As Word.Document        ' 생성될 μ›Œλ“œ λ¬Έμ„œλ₯Ό 담을 λ³€μˆ˜
    Dim ws As Worksheet               ' ν˜„μž¬ μ—‘μ…€ μ‹œνŠΈλ₯Ό 담을 λ³€μˆ˜
    Dim lastRow As Long               ' 데이터가 μžˆλŠ” λ§ˆμ§€λ§‰ ν–‰μ˜ 번호λ₯Ό μ €μž₯ν•  λ³€μˆ˜
    Dim i As Long                     ' λ°˜λ³΅λ¬Έμ„ μœ„ν•œ μΉ΄μš΄ν„° λ³€μˆ˜
    
    Dim savePath As String            ' μ›Œλ“œ 파일이 μ €μž₯될 폴더 경둜
    Dim docTitle As String            ' λ¬Έμ„œ 제λͺ© (예: "18번")
    Dim docPassage As String          ' μ˜μ–΄ μ§€λ¬Έ λ‚΄μš©
    Dim docTranslation As String      ' ν•œκΈ€ 해석 λ‚΄μš©
    
    ' === 2. 초기 μ„€μ •: 맀크둜 싀행을 μœ„ν•œ κΈ°λ³Έ ν™˜κ²½μ„ μ„€μ •ν•©λ‹ˆλ‹€. ===
    
    ' 이 VBA μ½”λ“œκ°€ λ“€μ–΄μžˆλŠ” μ—‘μ…€ 파일의 "Sheet1" μ‹œνŠΈλ₯Ό λ³€μˆ˜ ws에 ν• λ‹Ήν•©λ‹ˆλ‹€.
    ' λ§Œμ•½ μ‹œνŠΈ 이름이 λ‹€λ₯΄λ‹€λ©΄ "Sheet1" 뢀뢄을 μ‹€μ œ μ‹œνŠΈ μ΄λ¦„μœΌλ‘œ λ°”κΏ”μ£Όμ„Έμš”.
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' A열을 κΈ°μ€€μœΌλ‘œ, 데이터가 μž…λ ₯된 λ§ˆμ§€λ§‰ ν–‰ 번호λ₯Ό μ°Ύμ•„μ„œ lastRow λ³€μˆ˜μ— μ €μž₯ν•©λ‹ˆλ‹€.
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' μ›Œλ“œ νŒŒμΌμ„ μ €μž₯ν•  경둜λ₯Ό ν˜„μž¬ μ—‘μ…€ 파일이 μžˆλŠ” ν΄λ”λ‘œ μ§€μ •ν•©λ‹ˆλ‹€.
    savePath = ThisWorkbook.Path & ""
    
    ' ν™”λ©΄ μ—…λ°μ΄νŠΈλ₯Ό μž μ‹œ λ©ˆμΆ°μ„œ 맀크둜 μ‹€ν–‰ 속도λ₯Ό λ†’μž…λ‹ˆλ‹€.
    Application.ScreenUpdating = False
    
    ' === 3. 핡심 둜직: μ—‘μ…€ 데이터λ₯Ό 읽고 μ›Œλ“œ λ¬Έμ„œλ₯Ό μƒμ„±ν•˜λŠ” 과정을 λ°˜λ³΅ν•©λ‹ˆλ‹€. ===
    
    ' 2번째 ν–‰(μ‹€μ œ 데이터 μ‹œμž‘)λΆ€ν„° λ§ˆμ§€λ§‰ ν–‰κΉŒμ§€ ν•œ ν–‰μ”© 반볡 μ‹€ν–‰ν•©λ‹ˆλ‹€.
    For i = 2 To lastRow
    
        ' -- μ—‘μ…€μ—μ„œ 데이터 μ½μ–΄μ˜€κΈ° --
        docTitle = ws.Cells(i, "A").Value      ' iν–‰ Aμ—΄ (제λͺ©) 값을 λ³€μˆ˜μ— μ €μž₯
        docPassage = ws.Cells(i, "B").Value   ' iν–‰ Bμ—΄ (μ§€λ¬Έ) 값을 λ³€μˆ˜μ— μ €μž₯
        docTranslation = ws.Cells(i, "C").Value ' iν–‰ Cμ—΄ (해석) 값을 λ³€μˆ˜μ— μ €μž₯
        
        ' -- μ›Œλ“œ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 및 μƒˆ λ¬Έμ„œ 생성 --
        Set wdApp = New Word.Application      ' μƒˆλ‘œμš΄ μ›Œλ“œ ν”„λ‘œκ·Έλž¨μ„ λ©”λͺ¨λ¦¬μ— 생성
        Set wdDoc = wdApp.Documents.Add       ' μ›Œλ“œ ν”„λ‘œκ·Έλž¨μ— μƒˆ λ¬Έμ„œλ₯Ό μΆ”κ°€
        
        ' -- μ½μ–΄μ˜¨ 데이터λ₯Ό μ›Œλ“œ λ¬Έμ„œμ— μ“°κ³  μ„œμ‹ κΎΈλ―ΈκΈ° --
        With wdDoc.Content
            ' 1. 전체 κΈ€κΌ΄κ³Ό 크기 κΈ°λ³Έ μ„€μ •
            .Font.Name = "맑은 κ³ λ”•"
            .Font.Size = 11
            
            ' 2. 제λͺ© μΆ”κ°€ 및 μ„œμ‹ λ³€κ²½
            .InsertAfter "[" & docTitle & "] μ˜μ–΄ μ§€λ¬Έ 뢄석" & vbCrLf & vbCrLf
            .Paragraphs.Last.Range.Font.Bold = True  ' λ§ˆμ§€λ§‰μ— μΆ”κ°€λœ 문단(제λͺ©)을 ꡡ게
            .Paragraphs.Last.Range.Font.Size = 16    ' 제λͺ© κΈ€μž 크기 ν‚€μš°κΈ°
            .Paragraphs.Last.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter 'κ°€μš΄λ° μ •λ ¬
            
            ' 3. 원문(μ§€λ¬Έ) μΆ”κ°€ 및 μ„œμ‹ λ³€κ²½
            .InsertAfter "β–  원문 (English)" & vbCrLf
            .Paragraphs.Last.Range.Font.Bold = True
            .Paragraphs.Last.Range.Font.Size = 13
            .InsertAfter docPassage & vbCrLf & vbCrLf ' μ§€λ¬Έ λ‚΄μš© μΆ”κ°€ν•˜κ³  두 쀄 λ„μš°κΈ°
            
            ' 4. 해석 μΆ”κ°€ 및 μ„œμ‹ λ³€κ²½
            .InsertAfter "β–  해석 (Korean)" & vbCrLf
            .Paragraphs.Last.Range.Font.Bold = True
            .Paragraphs.Last.Range.Font.Size = 13
            .InsertAfter docTranslation & vbCrLf      ' 해석 λ‚΄μš© μΆ”κ°€
        End With
        
        ' -- μž‘μ—…ν•œ μ›Œλ“œ λ¬Έμ„œ μ €μž₯ 및 λ‹«κΈ° --
        ' 파일 이름 ν˜•μ‹: μ˜μ–΄ μ§€λ¬Έ_18번.docx
        wdDoc.SaveAs2 FileName:=savePath & "μ˜μ–΄ μ§€λ¬Έ_" & docTitle & ".docx"
        wdDoc.Close ' λ¬Έμ„œλ₯Ό λ‹«μŒ (μ €μž₯ μ—¬λΆ€ 묻지 μ•ŠμŒ)
        
        ' -- μ›Œλ“œ ν”„λ‘œκ·Έλž¨ μ’…λ£Œ --
        wdApp.Quit
        
        ' -- λ‹€μŒ λ°˜λ³΅μ„ μœ„ν•΄ λ³€μˆ˜ 정리 (λ©”λͺ¨λ¦¬ 관리) --
        Set wdDoc = Nothing
        Set wdApp = Nothing
        
    Next i ' λ‹€μŒ ν–‰μœΌλ‘œ μ΄λ™ν•˜μ—¬ Forλ¬Έ 반볡
    
    ' === 4. 마무리: λͺ¨λ“  μž‘μ—… μ™„λ£Œ ν›„ μ‚¬μš©μžμ—κ²Œ μ•Œλ¦Ό ===
    
    ' λ©ˆμ·„λ˜ ν™”λ©΄ μ—…λ°μ΄νŠΈλ₯Ό λ‹€μ‹œ μΌ­λ‹ˆλ‹€.
    Application.ScreenUpdating = True
    
    ' μž‘μ—…μ΄ μ™„λ£Œλ˜μ—ˆμŒμ„ λ©”μ‹œμ§€ μƒμžλ‘œ μ•Œλ €μ€λ‹ˆλ‹€.
    MsgBox "총 " & (lastRow - 1) & "개의 μ˜μ–΄ μ§€λ¬Έ 파일 생성이 μ™„λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.", vbInformation, "μž‘μ—… μ™„λ£Œ"

End Sub

3단계: λ²„νŠΌμ— 맀크둜 μ—°κ²° 및 μ‹€ν–‰

  1. VBA νŽΈμ§‘κΈ° 창을 λ‹«κ³  λ‹€μ‹œ μ—‘μ…€ ν™”λ©΄μœΌλ‘œ λŒμ•„μ˜΅λ‹ˆλ‹€.

  2. λ§Œλ“€μ–΄ λ‘μ—ˆλ˜ [μ›Œλ“œ λ¬Έμ„œ 생성] λ²„νŠΌ μœ„μ—μ„œ 마우슀 였λ₯Έμͺ½ λ²„νŠΌμ„ ν΄λ¦­ν•©λ‹ˆλ‹€.

  3. λ‚˜νƒ€λ‚˜λŠ” λ©”λ‰΄μ—μ„œ [맀크둜 μ§€μ •]을 μ„ νƒν•©λ‹ˆλ‹€.

    EXCEL_uO2ukSYRtI

  4. 맀크둜 λͺ©λ‘μ—μ„œ 방금 λ§Œλ“  CreateEnglishDocsλ₯Ό ν΄λ¦­ν•˜κ³  [확인]을 λˆ„λ¦…λ‹ˆλ‹€.

EXCEL_Tk2udZD9xb

이제 λͺ¨λ“  μ€€λΉ„κ°€ λλ‚¬μŠ΅λ‹ˆλ‹€. [μ›Œλ“œ λ¬Έμ„œ 생성] λ²„νŠΌμ„ ν΄λ¦­ν•΄λ³΄μ„Έμš”!


EXCEL_N0ag6IAybp

4단계: κ²°κ³Ό ν™•μΈν•˜κΈ°

λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ μ—‘μ…€ λ°μ΄ν„°μ˜ 수만큼 μž‘μ—…μ΄ 반볡된 ν›„, "μž‘μ—… μ™„λ£Œ" λ©”μ‹œμ§€ λ°•μŠ€κ°€ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

이제 μ—¬λŸ¬λΆ„μ˜ μ—‘μ…€ 파일(μ˜μ–΄ μ§€λ¬Έ 생성기.xlsm)이 μ €μž₯된 폴더λ₯Ό 확인해 λ³΄μ„Έμš”. μ˜μ–΄ μ§€λ¬Έ_18번.docx, μ˜μ–΄ μ§€λ¬Έ_19번.docx... 와 같이 각 μ§€λ¬Έλ³„λ‘œ μ™„λ²½ν•˜κ²Œ μ„œμ‹μ΄ 적용된 μ›Œλ“œ λ¬Έμ„œλ“€μ΄ μƒμ„±λœ 것을 보싀 수 μžˆμŠ΅λ‹ˆλ‹€!

EXCEL_aDNnVqm60z

[μƒμ„±λœ μ›Œλ“œ 파일 μ˜ˆμ‹œ: μ˜μ–΄ μ§€λ¬Έ_18번.docx]

[18번] μ˜μ–΄ μ§€λ¬Έ 뢄석

β–  원문 (English)

ACC Travel Agency Customers: Have you ever wanted to enjoy a holiday in nature? This summer is the best time to turn your dream into reality. We have a perfect travel package for you...

β–  해석 (Korean)

ACC 여행사 κ³ κ°λ‹˜κ»˜: μžμ—° μ†μ—μ„œ νœ΄κ°€λ₯Ό μ¦κΈ°λŠ” 것을 μ›ν•œ 적이 μžˆμŠ΅λ‹ˆκΉŒ? 이번 여름이 λ‹Ήμ‹ μ˜ κΏˆμ„ ν˜„μ‹€λ‘œ λ°”κΏ€ 졜고의 μ‹œκ°„μž…λ‹ˆλ‹€...

이처럼 VBAλ₯Ό ν™œμš©ν•˜λ©΄ λ‹¨μˆœ 반볡 업무λ₯Ό 극적으둜 쀄이고, μ›ν•˜λŠ” μ„œμ‹μ˜ λ¬Έμ„œλ₯Ό λŒ€λŸ‰μœΌλ‘œ μžλ™ 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. μΆ•ν•˜ν•©λ‹ˆλ‹€! πŸŽ‰