オートフィルター、Rangeオブジェクト、2次元配列
※題名は、PINK FLOYDのオマージュです。
オートフィルターをかけたRangeオブジェクトを2次元配列にぶち込む
セル範囲の値を2次元配列にぶち込むお馴染みの方法。
ClearContentsメソッドでは非表示行が無視されたが、この場合はどうなるのか。
やってみた
この状態で、次のコードを実行。
リスト1 標準モジュール
Public Sub testArray() Dim Sh As Worksheet Set Sh = ThisWorkbook.Worksheets("Sheet3") Dim a As Variant a = Sh.Range("D1").CurrentRegion.Value '……(*)' Dim maxRow As Integer Dim maxColumn As Integer maxRow = UBound(a, 1) maxColumn = UBound(a, 2) Dim i As Integer Dim j As Integer Dim str As String For i = 1 To maxRow str = "" For j = 1 To maxColumn If j = 1 Then str = a(i, j) Else str = str & " | " & a(i, j) End If Next Debug.Print str Next End Sub
D1セルを含むアクティブセル領域の値を2次元配列 a にぶち込んで、Forループで値を取り出しながらイミディエイトに表示する、というアホみたいなコード。
当然こうなる。
一部非表示にしてやってみる
例によって「武松」と「楊志」を非表示にした。
この状態でリスト1を実行。
まったく同じ結果になった。
ちなみに、リスト1の(*)のところを
a = Selection.Value
としても結果は同じだった。
おわりに
「だから何?」とか言われても、知りません。