오늘은 다른 엑셀 커뮤니티에서 질문을 너무 나도 정성스럽고 재미나게 올려주신 분이 계서서
거기에 올라왔던 질문내용과 함께 두가지 해법에 대한 팁을 올려 봅니다.
Subtotal 함수는 필터관련 함수로써 =Subtotal(함수,범위) 와 같은 구조로 되어 있는데..
이 함수가 재미난 부분은 첫번째 인수에서 숨겨진행을 포함할 것인지? 아닌지를 사용자가 선택하여
사용할수 있다는 것 입니다.
그러나 자료가 방대한데다 단순히 필터의 순번으로써 Subtotal 함수를 남용(?) 하였다가는 오랜 인내의
고통을 경험할지도 모른답니다.
그래서 이때는 결국은 VBA의 힘을 빌려다 써야 합니다. 첨부 파일에서 VBA는 워크시트의 Calculate 이벤트를
이용하였습니다.
Sub Numbering()
Dim rngT As Range
Dim r As Range
Dim n As Long
Dim lngR As Long
'맨마지막행 정보를 담구
lngR = Range("c1048576").End(xlUp).Row
' 화면갱신을 껏다가
Application.ScreenUpdating = False
' 필터가 된 상태인지 아닌지를 판단하여
' 필터가 해제된 상태(전체데이터가 펼쳐졌는지) 이면
' 채우기-> 연속데이타 기능을 이용하여 번호를 채워넣고
If Application.Subtotal(103, Columns(3)) = lngR Then
Range("a2").DataSeries Rowcol:=xlColumns, Type:=xlLinear, _
Date:=xlDay, Step:=1, Stop:=lngR - 1, Trend:=False
' 그렇지 않을 경우는 화면에 A열데이터 범위에서
' 화면에 보이는 셀만 순번을 채워 넣는다.
Else
Set rngT = Range("a2:a" & lngR).SpecialCells(xlCellTypeVisible)
For Each r In rngT
n = n + 1
r.Value = n
Next
End If
' 화면갱신을 살려준다.
Application.ScreenUpdating = True
End Sub