選択した範囲の内、非表示の列を含まない範囲の値を配列に格納したい ①
今日の出来事。
このような表があって、データ部分を配列化することになった。
Sub Test() Dim arr() As Variant arr() = Selection End Sub
普段だったら、滞りなく次の段階に進む。
しかし今回、あるはずのない値が目に留まった。
150?そんな数字、あったっけ?
調べてみて、直ぐに原因が分かった。C列が非表示となって隠れていたのだ。
ぬぬぬ、おのれ、どうしてくれよう。とりあえず安易に、表示されている範囲だけを指定してみた。
Sub Test() Dim arr() As Variant arr() = Selection.SpecialCells(xlCellTypeVisible).Value End Sub
結果は、失敗。非表示の溝を乗り越えることが出来ず、B列までの値しかとれていない。
色々やってみたが、時間切れ。
今回は取り敢えず、↓ の方法で対処することにした。
選択範囲のセルの値を一つずつ配列に格納する際、当該列が非表示か否か、確認する。非表示の場合は、格納しない。何とも地道な作業となってしまった。
Sub Test() Dim TargetRange As Range Set TargetRange = Selection Dim tempArr() As Variant tempArr() = Selection Dim r As Long Dim c As Long Dim i As Long: i = 0 Dim arr() As Variant ReDim arr(1 To TargetRange.Rows.Count, 1 To TargetRange.Columns.Count) For c = 1 To Selection.Columns.Count If TargetRange.Columns(c).Hidden = False Then i = i + 1 For r = 1 To Selection.Rows.Count arr(r, i) = tempArr(r, c) Next End If Next ReDim Preserve arr(1 To TargetRange.Rows.Count, 1 To i) End Sub
一撃で解決する方法は無いものか、引き続き探してみます。
参考まで。