코드가 길고 VBA 매크로가 몇 초 동안 실행되면 Excel이 정지되거나 응답하지 않는 것처럼 보일 수 있습니다. 코드가 제대로 작동하더라도 화면에 아무 일도 일어나지 않는 것처럼 보이기 때문에 사용자는 통합 문서가 정지되었다고 생각할 수 있습니다. 이 문제를 피하는 간단한 방법은 매크로가 실행되는 동안 Excel의 상태 표시줄에 라이브 메시지를 표시하는 것입니다.
이 튜토리얼에서는 VBA가 실행되는 동안 진행률 메시지를 표시하는 방법을 보여줍니다. UserForm이나 그래픽 진행률 표시줄이 필요하지 않습니다. 대부분의 경우 Application.StatusBar이면 충분합니다.
Application.StatusBar를 사용하는 이유
Excel에는 응용 프로그램 창 하단에 상태 표시줄이 내장되어 있습니다. VBA는 일시적으로 해당 영역의 일반 텍스트를 사용자 정의 메시지로 바꿀 수 있습니다.
이는 매크로가 다음과 같은 업데이트를 표시할 수 있음을 의미합니다:
- 100행 중 10행을 처리하는 중
- 데이터를 가져오는 중…
- 수식 작성 중...
- 65% 완료
이는 매크로가 아직 실행 중이라는 것을 사용자에게 알리고 싶지만 전체 시각적 진행률 표시줄을 만드는 추가 작업을 원하지 않을 때 유용합니다. 행 수나 백분율을 표시하여 메시지에 더 많은 정보를 제공할 수 있지만 여전히 텍스트 기반 솔루션입니다.
기본 구문:
Excel 상태 표시줄에 메시지를 표시하려면 다음을 사용하세요.
Application.StatusBar = "Processing..."
매크로가 완료되면 다음을 사용하여 상태 표시줄을 재설정하세요.
Application.StatusBar = False
Application.StatusBar =False로 설정하면 상태 표시줄의 제어가 Excel로 복원되어 기본 메시지를 다시 표시할 수 있습니다. 이 단계를 절대 건너뛰지 마세요.
기본 예:단순 진행 메시지
간단한 진행 메시지가 포함된 가장 기본적인 버전입니다. 상태 표시줄에 "보고서 실행 중... 잠시만 기다려 주십시오"라고 표시됩니다.
Sub SimpleStatusBar() Application.StatusBar = "Running report... please wait" ' Simulate work Dim i As Long For i = 1 To 50000 ' Your processing here Next i Application.StatusBar = False ' Restore the status bar MsgBox "Done!" End Sub
이것은 작동하지만 하나의 고정 메시지만 표시합니다. 사용자에게 매크로가 실행 중임을 알려주지만 실제 진행 상황은 표시되지 않습니다.
루프 중 실시간 진행 상황 표시
대부분의 실제 매크로에서는 행, 셀, 파일 또는 레코드를 하나씩 처리합니다. 따라서 루프가 진행됨에 따라 상태 표시줄을 쉽게 업데이트할 수 있습니다.
Sub ShowLoopProgress() Dim i As Long Dim lastRow As Long lastRow = Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To lastRow ' Simple action Cells(i, "K").Value = "Processed" ' Update progress message Application.StatusBar = "Processing row " & (i - 1) & " of " & lastRow DoEvents Next i Application.StatusBar = False MsgBox "Task completed!" End Sub
- DoEvents를 사용하면 매크로가 실행되는 동안 Excel이 화면을 새로 고치고 응답할 수 있습니다.
- 이 기능이 없으면 특히 긴 루프에서 매크로가 끝날 때까지 상태 표시줄이 눈에 띄게 업데이트되지 않을 수 있습니다.
- 실행이 약간 느려질 수 있으므로 필요하지 않은 한 매우 큰 루프에서 과도하게 사용하지 마십시오.
하단의 상태 표시줄에 '101행 중 90행을 처리 중'이 표시됩니다. .

백분율 메시지 추가
백분율을 포함하도록 진행 메시지를 사용자 정의할 수 있습니다. 백분율을 계산하여 상태 표시줄 텍스트에 포함시키기만 하면 됩니다.
Sub ShowPercentageProgress()
Dim i As Long
Dim lastRow As Long
Dim percentDone As Double
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow
' Simple action
Cells(i, "K").Value = "Processed"
' Update progress message
percentDone = (i - 1) / (lastRow - 1)
Application.StatusBar = "Processing row " & (i - 1) & " of " & (lastRow - 1) & _
" (" & Format(percentDone, "0%") & ")"
DoEvents
Next i
Application.StatusBar = False
MsgBox "Task completed!"
End Sub
이 코드는 '100행 중 14행 처리 중(14%)'을 표시하는 명확한 상태 업데이트를 사용자에게 생성합니다. .

간단한 수식 작업의 예
워크시트 작업을 수행하는 실제 예제를 살펴보겠습니다. 이 버전은 열에 간단한 판매 금액 공식을 작성합니다.
Sub ShowProgressWithFormula()
Dim i As Long
Dim lastRow As Long
Dim percentDone As Double
lastRow = Cells(Rows.Count, "H").End(xlUp).Row
For i = 2 To lastRow
' Simple action
Cells(i, "K").Formula = "=H" & i & "*I" & i
' Update progress message
percentDone = (i - 1) / (lastRow - 1)
Application.StatusBar = "Writing formulas... " & _
"Row " & (i - 1) & " of " & (lastRow - 1) & _
" (" & Format(percentDone, "0%") & ")"
DoEvents
Next i
Application.StatusBar = False
MsgBox "Formulas added in column K!"
End Sub
이는 간단한 예이지만 많은 사용자가 수행하는 워크시트 작업 유형을 밀접하게 반영합니다.
텍스트 기반의 "가짜 진행 표시줄"
Application.StatusBar는 실제 그래픽 진행률 표시줄을 만들 수 없습니다. 그러나 문자를 사용하여 막대를 만들어 시뮬레이션할 수 있습니다.
Sub StatusBarWithTextProgressBar() Dim i As Long Dim lastRow As Long Dim percentDone As Double Dim barLength As Integer Dim filledBars As Integer Dim progressBar As String lastRow = Cells(Rows.Count, "A").End(xlUp).Row barLength = 20 For i = 2 To lastRow Cells(i, "K").Value = "Processed" percentDone = (i - 1) / (lastRow - 1) filledBars = Int(percentDone * barLength) progressBar = String(filledBars, "|") & String(barLength - filledBars, ".") Application.StatusBar = "Progress: [" & progressBar & "] " & _ Format(percentDone, "0%") DoEvents Next i Application.StatusBar = False MsgBox "Completed!" End Sub
VBA를 실행할 때마다 상태 표시줄에 다음과 같은 내용이 표시됩니다.
진행률:[||||||||||…….] 67%
이는 여전히 텍스트일 뿐이지만 시각적으로 진행 상황을 더욱 강력하게 보여줍니다.

모범 사례:항상 상태 표시줄 재설정
가장 흔한 실수 중 하나는 매크로 끝에서 상태 표시줄을 복원하는 것을 잊어버리는 것입니다. Application.StatusBar =False를 사용하지 않는 경우 , 매크로가 완료된 후에도 Excel에서 사용자 지정 텍스트가 계속 표시될 수 있습니다. 더 안전한 버전은 간단한 오류 처리를 사용하므로 문제가 발생하더라도 상태 표시줄이 재설정됩니다.
Sub SafeStatusMessage()
Dim i As Long
Dim lastRow As Long
Dim percentDone As Double
On Error GoTo CleanUp
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow
Cells(i, "K").Value = "Processed"
percentDone = (i - 1) / (lastRow - 1)
Application.StatusBar = "Processing row " & (i - 1) & " of " & (lastRow - 1) & _
" (" & Format(percentDone, "0%") & ")"
DoEvents
Next i
MsgBox "Task completed!"
CleanUp:
Application.StatusBar = False
If Err.Number <> 0 Then
MsgBox "Error: " & Err.Description
End If
End Sub
이 패턴은 실제 사용에 더 적합합니다.
더 나은 상태 메시지를 위한 팁
좋은 상태 표시줄 메시지는 짧고 구체적이어야 합니다. 메시지를 간결하고 유용하게 유지하세요. 좋은 예는 다음과 같습니다:
- 판매 데이터를 가져오는 중…
- 중복 확인 중...
- 워크시트 서식을 지정하는 중…
- 처리 기록 200개 중 45개…
- 보고서 마무리 중…
메시지를 수행 중인 실제 작업과 일치시키십시오. 이렇게 하면 매크로가 더욱 전문적으로 느껴지고 신뢰하기 쉬워집니다.
즉시 재사용 가능한 패턴
거의 모든 매크로에서 이 패턴을 재사용할 수 있습니다. 이 코드를 복사하고 필요한 곳에 논리를 삽입하기만 하면 됩니다.
Sub MyMacro() On Error GoTo CleanUp Dim i As Long Dim total As Long total = 100 For i = 1 To total Application.StatusBar = "Processing item " & i & " of " & total DoEvents ' Your code here Next i CleanUp: Application.StatusBar = False End Sub
결론
이 튜토리얼을 따르면 VBA가 실행되는 동안 진행 메시지를 쉽게 표시할 수 있습니다. VBA 매크로가 여전히 작동하고 있음을 사용자에게 보여주려는 경우 Application.StatusBar는 사용 가능한 가장 간단한 도구 중 하나입니다. 전체 진행률 표시줄은 아니지만 충분할 때가 많습니다. 이 접근 방식은 구현하기 쉽고 안정적이며 최소한의 코드가 필요하며 장기 실행 VBA 프로시저 중 사용자 경험을 크게 향상시킵니다. 기본 루프 내에 상태 업데이트를 배치하여 자신의 매크로에서 테스트하세요. 코드 몇 줄만 있으면 됩니다.
솔루션이 포함된 무료 고급 Excel 연습을 받아보세요!