[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA SpecialCells(xlCellTypeVisible)の取得範囲』(tkit)
ご存じの方がおられましたら、ご教示お願いいたします。
アウトラインを含む範囲から可視セルの値を取得するため、
以下のコードで行ったところ、途中までしか取得できませんでした。
様々検索しましたが、類似事象など該当する情報は得られませんでした。
A 1 あ 2 い ※ 3 う ※ 4 え ※ 5 お ※ 6 か
※アウトラインで折り畳み状態(非表示)
Dim temp As Variant With ws temp = .Range("A1:A6").SpecialCells(xlVisible).Value End With
tempには、temp(1,1):あ,temp(1,1):かを想定していましたが、
temp(1,1):あ のみ代入されています。
< 使用 Excel:Excel2010、使用 OS:Windows10 >
指定した範囲が複数のAreaを含む場合の配列への転換は最初のAreaのみです。 しかも最初のAreaが単一セルなので あ が代入されます。 (seiya) 2019/08/23(金) 13:12
まず、イミディエイトウィンドウで、以下を実行してみてください。 表示されているセルだけ、正しく選択されているのが判ると思います。
? Range("A1:A6").SpecialCells(xlVisible).Address
次に、以下ですね。
? Range("$A$1,$A$6")
これは配列代入されず、先頭エリアのみ返してしまう訳です。 なので、一発代入ではなく、得られたRangeオブジェクトを For Each 等でループして、1セルずつ代入してみてください。
(???) 2019/08/23(金) 13:17
以下のコードが、実際に組んでいた形に近いので、
これで検証しました。
A 1 A 2 あ 3 い ※ 4 う ※ 5 え ※ 6 お ※ 7 か
Dim temp As Variant Debug.Print Range("A1:A7").SpecialCells(xlVisible).Address temp = Range("A1:A7").SpecialCells(xlVisible).Value
結果としては、A1,A2の値は代入されますが、A7の値は入りません。
イミディエイトウィンドウのアドレスは、$A$1:$A$2,$A$7 です。
$A$1:$A$2 が最初のエリアということで、このエリアのみ代入されていた
ということが分かりました。
普段から、配列へ一括代入を多用していましたが、知りませんでした。
独学で様々なサイトで基礎応用を学んできたつもりですが、まだまだでした。
勉強になりました。ありがとうございました。
(tkit) 2019/08/23(金) 13:51
私はIsArray関数で配列であるか否かを判定します。
If IsArray(temp) then '配列として処理 Else '単一の値として処理 End If (seiya ) 2019/08/23(金) 14:18
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.