Excel 화면 하단에서 선택한 셀을 더 멀리 유지할 수 있습니까? 즉, 하단에 도달하기 전에 자동 스크롤됩니다.

Excel 화면 하단에서 선택한 셀을 더 멀리 유지할 수 있습니까? 즉, 하단에 도달하기 전에 자동 스크롤됩니다.

이것을 설명하기가 어렵습니다. Excel에서 아래쪽 키를 눌러 행을 따라 아래로 이동한다고 상상해 보세요. 화면 하단에 도달한 후 아래쪽 키를 다시 누르면 스프레드시트가 한 번에 한 행씩 아래로 스크롤되므로 선택한 셀이 가시 범위를 벗어나지 않습니다.

이상하게도 내가 원하는 것은 맨 아래에서 20행 떨어진 곳에 있을 때 이 동작이 발생하는 것입니다. 따라서 선택한 셀 아래에는 항상 20개의 행이 표시됩니다.

이런 행동을 원하는 사람은 제가 처음이 아닐 것입니다. 이것이 가능한지, 그렇다면 어떻게 할 수 있는지 아는 사람이 있습니까? 아무것(대부분)은 VBA에서 가능하지만 가능하다면 스크립트되지 않은 솔루션을 선호합니다. 감사합니다!

답변1

z/OS를 사용해본 사람이라면 충분히 이해할 수 있는 내용입니다.

VBA 외부에서는 이동하는 동안 선택 항목이 변경되는 것을 방지하는 스크롤 잠금과 동일한 시각적 커서 위치를 유지하면서도 화면에 표시된 만큼의 행을 이동하는 페이지 위/아래를 알고 있습니다. 둘 다 법안에 맞지 않습니다.

나는 이에 대한 특별한 경우를 설계했습니다. 적어도 셀 크기가 고정되어 있을 때 선택 항목을 영구적으로 중앙에 유지합니다(그렇지 않으면 지적한 대로 계산이 지저분해지고 느려질 가능성이 높습니다). 표시 범위, 즉 화면 크기 + 확대/축소는 약간의 추가 비용으로 동적으로 결정될 수 있습니다. 또한 범위 선택을 처리하지 않았습니다. 중앙에 놓거나 무시하거나 이벤트를 새 시트에 동적으로 추가하지 않고 왼쪽 상단 셀을 기준으로 가운데에 배치합니다.

'Const SCRROWS = 24 ' Example screen size.
'Const SCRCOLS = 21
Global Pscrr As Long
Global Pscrc As Long

Function GetScreen() As Long()
Dim vret(2) As Long
If ActiveWindow.VisibleRange.Rows.Row + _
    ActiveWindow.VisibleRange.Rows.Count >= Rows.Count _
or ActiveWindow.VisibleRange.Columns.Column + _
    ActiveWindow.VisibleRange.Columns.Count >= Columns.Count Then
    vret(0) = Pscrr
    vret(1) = Pscrc
Else
    vret(0) = ActiveWindow.VisibleRange.Rows.Count
    vret(1) = ActiveWindow.VisibleRange.Columns.Count
    Pscrr = vret(0)
    Pscrc = vret(1)
End If
GetScreen = vret
End Function

Sub CenterScroll(slrow As Long, slcol As Long)
Dim nscrr As Long
Dim nscrc As Long
Dim scrsize() As Long
scrsize = GetScreen
nscrr = slrow - Int(scrsize(0) / 2)
If nscrr < 1 Then
    nscrr = 1
End If
nscrc = slcol - Int(scrsize(1) / 2)
If nscrc < 1 Then
    nscrc = 1
End If
ActiveWindow.ScrollRow = nscrr
ActiveWindow.ScrollColumn = nscrc
End Sub

Sub Button2_Click()
CenterScroll ActiveCell.Row, ActiveCell.Column
End Sub

'------Put this on the sheet which uses the scroll method------'
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
CenterScroll Target.Row, Target.Column
End Sub

20% - 80% 가장자리 제한을 추가하는 것은 상대적으로 간단해야 합니다('운동량' 개념을 도입한 다음 선택한 행 - 표시되는 맨 위 행 > 0.8 * 화면 행 등인지 확인해야 함). 그러나 강력한 솔루션은 내 범위를 벗어납니다.

답변2

시트 이름을 마우스 오른쪽 버튼으로 클릭하고 코드 보기를 선택하고 이 코드를 붙여넣습니다. 가보는 게 좋을 것 같아

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Selection.CountLarge > 1 Then Exit Sub
    Dim w As Window:    Set w = ActiveWindow
    Dim r As Range:     Set r = w.VisibleRange
    If Target.Row = r(1, 1).Row Then w.SmallScroll up:=1
    If Target.Row = r(1, 1).Offset(r.Rows.Count).Row - 20 Then w.SmallScroll down:=1
End Sub

관련 정보