보이는 열 수 결정 (Microsoft Excel)
Dave는 매크로에서 현재 창 또는 분할 창에 표시되는 열 수를 판별하는 방법이 필요합니다.
이것은 실제로 달성하기 매우 쉽습니다. 비결은 ActiveSheet 개체에 속하는 VisibleRange 개체로 작업해야한다는 것을 기억하는 것입니다. VisibleRange 개체에 .Columns 컬렉션을 사용한 다음 해당 컬렉션에 .Count 메서드를 사용할 수 있습니다. 최종 결과는 다음과 같은 방식으로 열 수입니다.
Sub VisibleColCount() Dim sTemp As String sTemp = "There are " sTemp = sTemp & ActiveWindow.VisibleRange.Columns.Count sTemp = sTemp & " columns visible." MsgBox sTemp End Sub
간단 해 보이죠? 문제는 .Count 메서드가 숨겨져 있는지 여부에 관계없이 컬렉션의 열 수를 반환한다는 것입니다. 예를 들어, 화면을보고 C 열부터 H 열까지 표시한다고 가정 해 보겠습니다. 즉, 6 개의 열이 표시되고 위의 매크로에서 .Count 메서드가 반환하는 것입니다. 그런 다음 F 열을 숨기면 C 열부터 I 열까지 표시됩니다. .Count가 여전히 6을 반환하는 대신 (C, D, E, G, H 및 I 열을 나타냄), 보이지 않는 경우에도 숨겨진 열을 포함하는 7을 반환합니다.
이 상황에 대한 해결책은 .Columns 컬렉션에있는 각 열의 .Hidden 속성을 확인하는 것입니다. .Hidden 속성이 False 인 경우에만 다음과 같은 방식으로 열이 보이는 것으로 간주되어야합니다.
Sub VisibleColCount() Dim c As Range Dim iCount As Integer Dim sTemp As String iCount = 0 For Each c In ActiveWindow.VisibleRange.Columns If Not c.Hidden Then iCount = iCount + 1 Next c sTemp = "The active window includes " sTemp = sTemp & ActiveWindow.VisibleRange.Columns.Count sTemp = sTemp & " columns. Of those columns, " If iCount = ActiveWindow.VisibleRange.Columns.Count Then sTemp = sTemp & "all " Else sTemp = sTemp & "only " End If sTemp = sTemp & iCount & " are visible." MsgBox sTemp End Sub
이 접근 방식에는 또 다른 문제가 있습니다. VBA와 관련하여 열은 해당 열의 일부만 표시되는 한 가시적 인 것으로 간주됩니다. 또한 Excel 디스플레이에서 창을 사용할 것으로 예상되는 경우 ActivePane 개체를 믹스에 추가하는 것이 좋습니다. 기본적으로 위의 매크로에서 간단한 변경이 필요합니다.
ActiveWindow 개체를 볼 수있는 곳이면 어디에서나 다음과 같이 ActivePane을 사용합니다.
For Each c In ActiveWindow.ActivePane.VisibleRange.Columns
이렇게하면 계수를 수행 할 때 매크로가 창에서 현재 창만 볼 수 있습니다.
_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.
이 팁 (617)은 Microsoft Excel 2007, 2010, 2013 및 2016에 적용됩니다.