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

このアプローチにはもう1つの落とし穴があります。VBAに関する限り、その列のスライバーだけが表示されている限り、その列は表示されていると見なされます。また、Excelディスプレイでペインを使用することが予想される場合は、ActivePaneオブジェクトをミックスに追加することを検討してください。基本的に、上記のマクロを簡単に変更する必要があります。

ActiveWindowオブジェクトが表示されている場合は、次のようにActivePaneを続けます。

For Each c In ActiveWindow.ActivePane.VisibleRange.Columns

これにより、カウントを実行するときに、マクロがウィンドウ内の現在のペインのみを参照するようになります。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(617)は、Microsoft Excel 2007、2010、2013、および2016に適用されます。