Tim은 열 머리글이 약간 다른 두 개의 개별 섹션 (상단 및 하단 섹션이라고하겠습니다)이있는 워크 시트를 가지고 있습니다. 그는 아래로 스크롤하는 동안 상단 섹션 헤더를 표시하기 위해 상단 행을 고정했지만 특정 지점을 지나서 스크롤 한 후 Tim은 상단 섹션 헤더가 여전히 상단에있는 하단 섹션 데이터를 보게됩니다. 그는 하단 섹션 데이터 만 표시되는 지점까지 아래로 스크롤 할 때 고정 된 헤더 행을 전환하여 하단 섹션 헤더를 표시하는 방법이 있는지 알고 싶습니다.

예,이 작업을 수행하는 방법이 있지만 매크로를 사용해야합니다.

매크로 기반 솔루션을 고려하기 전에 각 섹션이 서로 다른 워크 시트에 있도록 데이터를 재구성하는 것을 고려할 수 있습니다. (디자인 관점에서 보면 이것이 가장 쉬운 해결책이 될 것입니다.) 이것이 가능하지 않다면 매크로를 살펴 봐야합니다.

한 가지 쉬운 방법은 선택한 행에 따라 워크 시트의 맨 위 행 (1 행)에 저장된 내용을 변경하는 것입니다. 예를 들어, 다음 매크로는 활성 셀이있는 위치에 따라 맨 위 행에서 변경합니다. 40 행 이전에있는 경우 한 세트의 헤더가 첫 번째 행에 채워집니다. 40 행 이후에 다른 헤더 세트가 채워집니다.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim iBottomData As Integer

iBottomData = 40

If ActiveCell.Row < iBottomData Then         Cells(1, 1).Value = "Last Name"

Cells(1, 2).Value = "First Name"

Cells(1, 3).Value = "Address"

Cells(1, 4).Value = "Balance"

Else         Cells(1, 1).Value = "Account"

Cells(1, 2).Value = "Sales Rep"

Cells(1, 3).Value = "Status"

Cells(1, 4).Value = ""

End If End Sub

매크로를 사용하려면 두 개의 데이터 섹션이 포함 된 워크 시트의 코드 창에 매크로를 배치해야합니다. 또한 하단 데이터 섹션이 시작되는 행 번호를 반영하도록 iBottomData 변수에 할당 된 값을 변경해야합니다.

워크 시트 아래로 이동할 때 고정 된 행을 실제로 변경하려면 매크로가 좀 더 강력해야합니다. 실제로 뒤에 오는 두 개의 매크로가 있으며 (둘 다 워크 시트의 코드 창으로 이동) 선택한 셀을 변경하고 워크 시트를 마우스 오른쪽 버튼으로 클릭하면 작동이 시작됩니다.

Private Sub Worksheet_BeforeRightClick(ByVal _   Target As Range, Cancel As Boolean)

Application.ScreenUpdating = False     ActiveWindow.FreezePanes = False     ActiveWindow.Split = False     Application.EnableEvents = False     Application.Goto Cells(1, 1), scroll:=True     With ActiveWindow         .SplitColumn = 0         .SplitRow = 1     End With     ActiveWindow.FreezePanes = True     Application.Goto Cells(Target.Row - 1, _       Target.Column), scroll:=True     Application.EnableEvents = True     On Error Resume Next        'MUST reenable events     Application.EnableEvents = False     ActiveCell.Offset(-1, 1 - Target.Column).Select     ' so the right click menu doesn't popup     ' only if this is the second header row.

Cancel = True      Application.EnableEvents = True End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Application.ScreenUpdating = False     If Cells(Target.Row, 1).Value <> "title2" Then Exit Sub     ActiveWindow.FreezePanes = False     ActiveWindow.Split = False     Application.Goto Cells(Target.Row, 1), scroll:=True     With ActiveWindow         .SplitColumn = 0         .SplitRow = 1     End With     ActiveWindow.FreezePanes = True     On Error Resume Next        'MUST reenable events     Application.EnableEvents = False     ActiveCell.Offset(1, 1 - Target.Column).Select     Application.EnableEvents = True End Sub

Worksheet_SelectionChange 이벤트 처리기는 활성 셀 커서가 해당 줄에 도달하면 고정 분할을 두 번째 머리글 행 아래로 자동으로 이동합니다. 이 행은 행의 첫 번째 셀에 “title2″텍스트가 포함되어 있는지 여부를 확인하는 If 문에서 감지됩니다.

(분명히 첫 번째 셀에 실제로 무엇이 있을지 반영하도록 변경해야합니다.)

Worksheet_BeforeRightClick 이벤트 처리기는 고정 된 분할을 첫 번째 머리글 집합으로 다시 이동하지만 활성 셀은 두 번째 머리글 집합 위의 행에 둡니다.

이 팁에 제시된 두 매크로 솔루션은 실제로 워크 시트를 스크롤하고 이동하면서 선택한 셀을 변경한다고 가정한다는 것을 이해해야합니다. (즉, 아래쪽 화살표 키를 눌러 스크롤합니다.) 단순히 세로 스크롤 막대를 사용하여 워크 시트에 표시되는 내용을 변경하는 경우 고정 된 제목은 변경되지 않으므로 변경되지 않습니다. 선택한 셀과 이벤트 핸들러가 트리거되지 않습니다.

보다 광범위한 솔루션을 만드는 것은 실제 운영 체제와의 인터페이스를 포함하므로이 팁의 범위를 벗어납니다.

그러나이 경로로가는 데 관심이 있다면 Chip Pearson 웹 사이트의 다음 페이지에서 좋은 출발점이 될 수 있습니다.

http://www.cpearson.com/excel/DetectScroll.htm

_ 참고 : _

이 페이지 (또는 ExcelTips 사이트의 다른 페이지)에 설명 된 매크로를 사용하는 방법을 알고 싶다면 유용한 정보가 포함 된 특별 페이지를 준비했습니다.

link : / excelribbon-ExcelTipsMacros [새 브라우저 탭에서 특별 페이지를 열려면 여기를 클릭하세요].

_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.

이 팁 (3446)은 Microsoft Excel 97, 2000, 2002 및 2003에 적용됩니다. 여기에서 Excel (Excel 2007 이상)의 리본 인터페이스에 대한이 팁의 버전을 찾을 수 있습니다.

link : / excelribbon-Switching_Headers_in_a_Frozen_Row [고정 된 행에서 헤더 전환].