행의 값이 ""와 같으면 자동으로 행을 숨기는 VBA 코드를 작성하려고 합니다. 내 값 범위는 A37:A400입니다. 내 범위가 너무 크기 때문에 이전 VbA는 속도를 늦추고 한 번에 한 줄씩 표시했습니다. 이 큰 목록을 통과하여 빠른 방식으로 행을 숨기는 빠른 코드를 만드는 아이디어. 지금은 너무 긴 행을 숨기는 데 약 1분 정도 걸립니다.
Sub HideRows()
Dim cell As Range
For Each cell In Range("A37:A400")
If Not IsEmpty(cell) Then
If cell.Value = "" Then
cell.EntireRow.Hidden = True
End If
End If
Next
End Sub
답변1
Application.ScreenUpdating = False
숨김 코드 바로 앞에 추가하고 Application.ScreenUpdating = True
숨김 코드 뒤에 추가해 보세요. 일반적으로 이 트릭을 사용하면 대부분의 VBA 매크로 속도가 약 10배 정도 빨라집니다. 코드가 실행될 때 응용 프로그램이 계속해서 다시 그릴 필요가 없기 때문입니다.
행 일괄 숨기기를 수행하는 대신 각 셀을 개별적으로 확인하고 행을 개별적으로 숨기기 때문에 이는 귀하의 경우에 도움이 될 것입니다.
답변2
귀하의 코드가 어떻게 작동하는지 알 수 없습니다.
다음 2줄이 있습니다
If Not IsEmpty(cell) Then
If cell.Value = "" Then
첫 번째 줄이 비어 있지 않으면 두 번째 줄은 항상 false를 반환합니다. 첫 번째 줄은 "셀이 비어 있지 않은 경우"라고 말하고 다음 줄은 "줄이 비어 있는 경우"라고 말합니다... 음, 이미 비어 있지 않은 것으로 평가되었습니다. 따라서 코드가 어떻게 작동하는지 알 수 없도록 행을 숨길 수 없어야 합니다. 코드 외부에서 다른 일이 벌어지고 있는 것 같지만...
그러나 이것은 내 컴퓨터에서 잘 작동합니다.
Sub Button1_Click()
Dim cell As Range
For Each cell In Range("A1:A1600")
If cell.Value = "" Then
cell.EntireRow.Hidden = True
End If
Next
End Sub
행이 1600개 있어서 실행하는 데 5초 정도 걸립니다.