엑셀 스크롤바 일치 시키기(UsedRange 에러)

by 지천명영어 posted Nov 24, 2022
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

엑셀에서 가끔 나타나는 에러입니다.

엑셀에서 행의 마지막이 200번 이라면, 스크롤바의 박스는 아래에 위치해야 합니다.

하지만, 아래 그림과 같이 마지막 200번 행에 위치해도, 스크롤바 박스가 여전히 위에 있습니다.

 

2022-11-24 23 35 52.png

 

이런 에러가 발생하는 이유는 엑셀에서 스크롤바를 UsedRange로 마지막셀을 잘못 인식하기 때문입니다. 그래서, 정확한 마지막 셀의 위치를 찾아 주면 됩니다.

 

즉, UsedRange의 마지막 셀과 find로 찾은 마지막 셀을 비교해서 잘못된 정보를 제거해 줍니다.

 

아래는 코드 예제 입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Sub 스크롤바_일치_시키기()
 
Dim MR, MC As Long 'MaxRow MaxCol
Dim i_used_row, i_used_col As Long
 
'2가지 방법으로 마지막 셀의 행과 열을 구한다.
 
'1번 방법 : find를 이용해서 마지막 셀을 찾는다(find명령은 쉬트에 값이 없으면 에러, 그래서 에러 무시명령 넣어 준다)
'2번 방법 : UsedRange를 이용해서 마지막 셀을 찾는다.
 
'2번 방법으로(UsedRange) 정해진 셀의 마지막을 기준으로 스크롤바가 생성된다.
'그래서, find로 찾은 셀주소와 비교해서 불필요한 영역을 삭제해준다.
 
    On Error Resume Next
        MR = Cells.Find("*", , , , xlByRows, xlPrevious).row
            If Err.Number = 0 Then
                Err.Clear
            Else
                MR = 1
            End If
    On Error GoTo 0
        
    On Error Resume Next
        MC = Cells.Find("*", , , , xlByColumns, xlPrevious).Column
            If Err.Number = 0 Then
                Err.Clear
            Else
                MC = 1
            End If
    On Error GoTo 0
 
    i_used_row = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).row
    i_used_col = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
    
'1번과 2번을 비교해서 데이터가 없는 영역을 삭제
    If MR < i_used_row Then Range(Rows(MR + 1), Rows(i_used_row)).EntireRow.Delete
    If MC < i_used_col Then Range(Columns(MC + 1), Columns(i_used_col)).EntireColumn.Delete
 
'UsedRange를 재 활성화
    ActiveSheet.UsedRange
 
End Sub
 
 
 
cs

Articles

1 2