引用:
取得したいのは、2〜4行目+8〜10行目です。
試しに動かした場合と同じように、配列みたいに取得できるの希望です。
引用:
TargetA = .Resize(.Rows.Count - 1).Offset(1, 0).SpecialCells(xlCellTypeVisible)
・単一のセルを参照している Excel.Range オブジェクトの
Value プロパティが返すのは、そのセルの値である。
・単一のセル領域( 2 つ以上のセルが連続している範囲)を参照している
Excel.Range オブジェクトの Value プロパティが返すのは、
その領域の全てのセルの値が格納された 2 次元配列である。
・
複数のセルまたはセル領域を含む範囲を参照している Excel.Range オブジェクトの
Value プロパティが返すのは、
1 つめのセルの値か、もしくは
1 つめの領域に含まれる
全てのセルの値が格納された 2 次元配列である。
引用:
以下例だと、2〜4行目しか取得できません。
したがって、それは仕様通りの動作です。
引用:
テストデータ
データ1,データ2,
1,あ,
1,い,
1,う,
0,え,
3,お,
2,か,
1,き,
1,く,
1,け,
(標準モジュール)
--------------------------------------------------------------------
Sub Test2()
Dim wsTarget As Worksheet
Set wsTarget = ThisWorkbook.Worksheets("Sheet1")
With wsTarget
PrintValues .Range("A2")
PrintValues .Range("A2:B4")
PrintValues .Range("A2
,B2
,A4
,B4")
PrintValues .Range("A2:B2
,A4:B4")
PrintValues .Range("A2
,A4:B4")
End With
Set wsTarget = Nothing
End Sub
Private Sub PrintValues(Target As Excel.Range)
Debug.Print "参照範囲のアドレス: " & Target.Address
Dim rngArea As Excel.Range
Dim lngAreaCount As Long
Dim varValue As Variant
Dim lngRow As Long
Dim lngColumn As Long
Dim varList As Variant
For Each rngArea In Target
.Areas
lngAreaCount = lngAreaCount + 1
Debug.Print lngAreaCount & " つめのセル領域のアドレス: " & rngArea.Address
varValue = rngArea.Value
'配列ではない場合
If
IsArray(varValue) = False Then
Debug.Print vbTab & varValue
'配列である場合
Else
For lngRow = LBound(varValue, 1) To UBound(varValue, 1)
varList = ""
For lngColumn = LBound(varValue, 2) To UBound(varValue, 2)
varList = varList & vbTab & varValue(lngRow, lngColumn)
Next
Debug.Print varList
Next
End If
Next
Debug.Print ""
End Sub
--------------------------------------------------------------------
(イミディエイトウィンドウへの出力結果)
--------------------------------------------------------------------
参照範囲のアドレス: $A$2
1 つめのセル領域のアドレス: $A$2
1
参照範囲のアドレス: $A$2:$B$4
1 つめのセル領域のアドレス: $A$2:$B$4
1 あ
1 い
1 う
参照範囲のアドレス: $A$2,$B$2,$A$4,$B$4
1 つめのセル領域のアドレス: $A$2
1
2 つめのセル領域のアドレス: $B$2
あ
3 つめのセル領域のアドレス: $A$4
1
4 つめのセル領域のアドレス: $B$4
う
参照範囲のアドレス: $A$2:$B$2,$A$4:$B$4
1 つめのセル領域のアドレス: $A$2:$B$2
1 あ
2 つめのセル領域のアドレス: $A$4:$B$4
1 う
参照範囲のアドレス: $A$2,$A$4:$B$4
1 つめのセル領域のアドレス: $A$2
1
2 つめのセル領域のアドレス: $A$4:$B$4
1 う
--------------------------------------------------------------------
引用:
For Eachで回せば1行ずつ取得できるのは分かっているのですが
1発で取得出来るときもForEachで回すのは面倒くさいし手間なので
良い方法があれば教えてください。
ただ Value プロパティを Variant 型の変数に代入しただけでは、
ご希望の結果は得ることは出来ません。
今回のような場合、むしろ「 1 発で取得できる」状況というのは
非常に限られているのです。
「列数が同一である複数のセル領域に含まれる全ての要素を
単一の 2 次元配列に変換(統合)したい」ということであれば、
別途そういう処理を実行するしかないでしょう。
(例えば動的配列を使用するなど)