엑셀의 설계변경 작업은 당초내역서를 활용해서 한칸씩 복사해서 활용하게 됩니다.
이때 내역서가 길면 그만큼 일일이 수작업으로 해야할 일이 많게되는데 이것을 바이브코딩을 이용하여 엑셀VBA(매트로)를 자동적으로 생성하여 이것을 엑셀의 매크로시트에 복사하여 한번에 작업이 가능하게 됩니다.


(1. 사용된 프롬프트)
첨부된 3개 파일(당초, 변경, 설계변경)을 사용하여 설계변경 파일의 모든 시트를 작성해줘.
[작업 방법]
1. 대상: 설계변경 파일의 모든 시트
2. 처리 순서 (5행부터 데이터 끝까지): * 변경 파일 해당행 복사 → 설계변경에 붙여넣기 (빨간색) * 당초 파일 해당행 복사 → 설계변경에 붙여넣기 (검은색) * 다음 행으로 이동, 반복
3. 예외: 당초/변경 파일에 시트가 없으면 건너뛰기
4. 수식 행 번호 변환: 행이 2배로 늘어나므로, 수식 내 행 번호를 아래 공식으로 변환할 것 (미변환 시 금액 합계 오류 발생) - 변경 행(빨간): 원본 N행 → 5 + (N-5) × 2 - 당초 행(검은): 원본 N행 → 5 + (N-5) × 2 + 1 - 같은 시트(G5), 다른 시트(내역서!G6), 절대참조($D$8) 모두 적용 - 행 번호 5 미만(헤더 참조)은 변환하지 않음
5. 빈 행이 중간에 있어도 멈추지 말고 max_row까지 처리할 것
6. keep_vba=True로 로드하고 .xlsm으로 저장할 것
(2. 엑셀VBA 사용하기) -> alt키+F11키
설계변경 엑셀화일에 VBA에 기록하고 실행(당초,변경화일은 같은 디렉토리에 위치)
Sub CompareRowByRowDataForBothSheets()
Dim 설계변경WB As Workbook
Dim 변경WB As Workbook
Dim 당초WB As Workbook
Dim targetSheet1 As Worksheet, targetSheet2 As Worksheet
Dim 변경Sheet1 As Worksheet, 변경Sheet2 As Worksheet
Dim 당초Sheet1 As Worksheet, 당초Sheet2 As Worksheet
Dim pasteRow1 As Long, pasteRow2 As Long
Dim 변경Row As Long, 당초Row As Long
Dim sourcePath As String
Dim lastRow변경1 As Long, lastRow당초1 As Long
Dim lastRow변경2 As Long, lastRow당초2 As Long
Dim dataRange As Range
' 화면 업데이트 중지 및 상태 표시줄 설정
Application.ScreenUpdating = False
Application.StatusBar = "작업 진행 중... 잠시만 기다려 주세요."
' 현재 열려 있는 도로확포장(설계변경) 파일 참조
On Error Resume Next
Set 설계변경WB = Workbooks("도로확포장(설계변경).xlsm")
If 설계변경WB Is Nothing Then
MsgBox "도로확포장(설계변경) 파일이 열려 있지 않습니다.", vbExclamation
Application.ScreenUpdating = True
Exit Sub
End If
On Error GoTo 0
' "내역서"와 "총괄서" 시트 설정
Set targetSheet1 = 설계변경WB.Sheets("내역서")
Set targetSheet2 = 설계변경WB.Sheets("총괄서")
' 파일 경로 설정 (현재 파일과 같은 디렉토리)
sourcePath = 설계변경WB.Path & "\"
' 도로확포장(변경) 및 도로확포장공사(당초) 파일 열기
Set 변경WB = GetWorkbook(sourcePath & "도로확포장(변경).xlsx")
Set 당초WB = GetWorkbook(sourcePath & "도로확포장(당초).xlsx")
If 변경WB Is Nothing Or 당초WB Is Nothing Then Exit Sub
' 각 파일의 "내역서" 및 "총괄서" 시트 참조
Set 변경Sheet1 = 변경WB.Sheets("내역서")
Set 변경Sheet2 = 변경WB.Sheets("총괄서")
Set 당초Sheet1 = 당초WB.Sheets("내역서")
Set 당초Sheet2 = 당초WB.Sheets("총괄서")
' 마지막 행 찾기
lastRow변경1 = 변경Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
lastRow당초1 = 당초Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
lastRow변경2 = 변경Sheet2.Cells(Rows.Count, 1).End(xlUp).Row
lastRow당초2 = 당초Sheet2.Cells(Rows.Count, 1).End(xlUp).Row
' 붙여넣기 시작 행 설정
pasteRow1 = 5
pasteRow2 = 5
변경Row = 5
당초Row = 5
' "내역서" 시트 데이터가 끝날 때까지 행별로 복사 및 붙여넣기
Do While 변경Row <= lastRow변경1 Or 당초Row <= lastRow당초1
' 변경 파일의 내역서 행 복사 및 붙여넣기 (빨간색)
If 변경Row <= lastRow변경1 Then
변경Sheet1.Rows(변경Row).Copy
targetSheet1.Cells(pasteRow1, 1).PasteSpecial xlPasteValues
targetSheet1.Rows(pasteRow1).Font.Color = RGB(255, 0, 0) ' 빨간색
pasteRow1 = pasteRow1 + 1
변경Row = 변경Row + 1
Application.CutCopyMode = False ' 클립보드 비우기
End If
' 당초 파일의 내역서 행 복사 및 붙여넣기 (검은색)
If 당초Row <= lastRow당초1 Then
당초Sheet1.Rows(당초Row).Copy
targetSheet1.Cells(pasteRow1, 1).PasteSpecial xlPasteValues
targetSheet1.Rows(pasteRow1).Font.Color = RGB(0, 0, 0) ' 검은색
pasteRow1 = pasteRow1 + 1
당초Row = 당초Row + 1
Application.CutCopyMode = False ' 클립보드 비우기
End If
Loop
' "총괄서" 시트 데이터가 끝날 때까지 행별로 복사 및 붙여넣기
변경Row = 5
당초Row = 5
Do While 변경Row <= lastRow변경2 Or 당초Row <= lastRow당초2
' 변경 파일의 총괄서 행 복사 및 붙여넣기 (빨간색)
If 변경Row <= lastRow변경2 Then
변경Sheet2.Rows(변경Row).Copy
targetSheet2.Cells(pasteRow2, 1).PasteSpecial xlPasteValues
targetSheet2.Rows(pasteRow2).Font.Color = RGB(255, 0, 0) ' 빨간색
pasteRow2 = pasteRow2 + 1
변경Row = 변경Row + 1
Application.CutCopyMode = False ' 클립보드 비우기
End If
' 당초 파일의 총괄서 행 복사 및 붙여넣기 (검은색)
If 당초Row <= lastRow당초2 Then
당초Sheet2.Rows(당초Row).Copy
targetSheet2.Cells(pasteRow2, 1).PasteSpecial xlPasteValues
targetSheet2.Rows(pasteRow2).Font.Color = RGB(0, 0, 0) ' 검은색
pasteRow2 = pasteRow2 + 1
당초Row = 당초Row + 1
Application.CutCopyMode = False ' 클립보드 비우기
End If
Loop
' 내역서 시트의 서식 지정
Set dataRange = targetSheet1.Range("A5", targetSheet1.Cells(pasteRow1 - 1, targetSheet1.Cells(5, Columns.Count).End(xlToLeft).Column))
ApplyFormatting dataRange
' 총괄서 시트의 서식 지정
Set dataRange = targetSheet2.Range("A5", targetSheet2.Cells(pasteRow2 - 1, targetSheet2.Cells(5, Columns.Count).End(xlToLeft).Column))
ApplyFormatting dataRange
' 닫기
변경WB.Close SaveChanges:=False
당초WB.Close SaveChanges:=False
' 상태 표시줄과 화면 업데이트 설정 복원
Application.StatusBar = "작업 완료되었습니다."
Application.ScreenUpdating = True
Application.CutCopyMode = False ' 클립보드 비우기
MsgBox "내역서 및 총괄서 데이터 비교 작업이 완료되었습니다.", vbInformation
End Sub
' 서식을 적용하는 서브루틴
Sub ApplyFormatting(rng As Range)
' 열 너비 자동 조정
rng.EntireColumn.AutoFit
' 테두리 설정
With rng.Borders
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
' 글자 크기 설정
rng.Font.Size = 10 ' 원하는 글자 크기로 변경 가능
' 숫자 서식 및 오른쪽 정렬 적용
rng.NumberFormat = "#,##0"
rng.HorizontalAlignment = xlRight
End Sub
' 이미 열린 워크북을 참조하거나 새로 엽니다
Function GetWorkbook(filePath As String) As Workbook
Dim wb As Workbook
Dim fileName As String
fileName = Dir(filePath)
On Error Resume Next
Set wb = Workbooks(fileName) ' 이미 열려 있는지 확인
If wb Is Nothing Then
Set wb = Workbooks.Open(filePath) ' 열려 있지 않으면 새로 열기
End If
On Error GoTo 0
Set GetWorkbook = wb
End Function
'AI실무 프롬프트' 카테고리의 다른 글
| vlookup함수입력 - 프롬프트 사용하기 (0) | 2026.05.10 |
|---|---|
| 낙찰율 85%계약 착공내역서 만들기 (0) | 2026.05.10 |
| 엑셀 바이브 코딩 (0) | 2026.05.08 |
| 생성형AI의 수해복구 및 주민숙원사업 등 설계 자동화 (사용법) (0) | 2026.02.16 |
| 우암산 조망·무심천 환경·지주 수익성… 세 마리 토끼 잡는 프롬프트 설계 (1) | 2025.12.31 |