|
こんばんわ。
新潟県のみなさん、大丈夫でっか?
まだ余震があるみたいやから、気ぃつけておくれやす。
>Secialcells() で可視セル領域だけをループしようと思うと、
>For Each 〜 Next は OK なのですが、インデックス(カウンタ)では上手く回らないのです。
こんなんで実験してみると・・・
Sub test()
Dim i As Long
Dim r As Range
Dim rr As Range
Rows("2:4").Hidden = True
Set rr = Range("A1:A5").SpecialCells(xlCellTypeVisible)
For Each r In rr
Debug.Print 1, r.Address
Next
Debug.Print "-------------------------"
For i = 1 To rr.Cells.Count
Debug.Print 2, rr.Cells(i).Address
Next
Debug.Print "-------------------------"
For i = 1 To 10
Debug.Print 3, rr.Cells(i).Address
Next
End Sub
結果は↓こうなります。
1 $A$1
1 $A$5
-------------------------
2 $A$1
2 $A$2
-------------------------
3 $A$1
3 $A$2
3 $A$3
3 $A$4
3 $A$5
3 $A$6
3 $A$7
3 $A$8
3 $A$9
3 $A$10
カウンタを使うと、該当のセル範囲を超えた範囲も参照してまうってことやろね。
ちなみにイミディエイトで
?Range("A1:A2").Cells(10).Address
ってやったら、答えは$A$10で、
?Range("A1:B1").Cells(10).Address
なら、答えは$B$5でした。
Cells(Index)の場合は選択範囲の列幅で下へ、左〜右方向に参照するみたいやね。
?Range("A1:A2").Cells(3,3).Address
のときは$C$3が返るから
Cells(Row,Column)でも、選択範囲を超えて参照するみたいです。
SpecialCellsとかで飛び飛びのセル範囲を取得したときは、For Each を使わんと
思いもせん結果になるから要注意ってことですわなー
>最初の「可視セルに連番をつける」ことと、
>差込印刷がどう関係があるのか、まだ判っていません。
うーん・・・
住所録リストで件数でも確認したいんかな?
ま、こっちで推測しても始まらんけど。
ほな。
|
|