|
>つまりはintDataCntというのは数字そのものなんですね。
↑この認識でよいです、今の段階では。
>Do While Range("A" & intDataCnt).Value <> ""
今度は、御自分では こうだと思っているという考えも
入れてください。そうすれば、どこは、合っていて、どこの認識が違うとか
わかりますから・・・・。
分けて考えます
まず、Do 〜 Loop文
Do とLoopは、セットになっています。
この間に記述したコードを繰り返し処理します。
例
sub test1()
dim i as Integer
i=1
do
i=i+1
loop
end sub
上記test1を実行すれば、
i=i+1
と言う処理を 際限なく繰り返そうとしているコードです。
ところが、実行すると「オーバーフローしました」というエラーメッセージが表示され
ます。デバッグをクリックすると
i=i+1
↑ここでプログラムが止まっていることを表すようにこの行に色が付いていますね?
iは、整数型で宣言された変数です。整数型は、2^15-1=32767
32767がiに入れることができる最大値です。
よって、i=i+1 を延々繰り返す処理では、いつか限界をこえますから、エラーになります。
ここで出てくるのが この繰り返しを抜ける条件です。
条件の一つに While というのがあります
Sub test2()
Dim i As Integer
i = 1
Do While i < 2 ^ 15 - 1
i = i + 1
Loop
MsgBox i
End Sub
これは、iが、 i < 2 ^ 15 - 1 この条件を満たしている間は、ループする
と言う意味です。
条件には、他にも Until というのがありますし、
Do while 〜
loop
Do Until 〜
loop
Do
loop While 〜
Do
loop Until 〜
付ける場所よって微妙にロジックが違う場合もあります。
ループ処理は、プログラミングの要ですから、しっかり押さえて置いてください。
Rangeプロパティ
このプロパティを通して、セルにアクセスできます。
Range("A1").value でセルA1に入っている値が参照できます。
intDataCnt=1
Range("A" & intDataCnt).Value
は、intDataCntの中は、1ですから、
"A" & intDataCntは、"A1"になり、
すなわちこれもまた、Range("A1").valueでセルA1に入っている値が参照できます。
元に戻ると
>Do While Range("A" & intDataCnt).Value <> ""
これ、下のほうには、Loopがあると思います。
また、Loopの前に方に
intDataCnt = intDataCnt + 1
これがあるのですよね?
Sub test3()
Dim intDataCnt As Integer
intDataCnt = 1
Do While Range("A" & intDataCnt).Value <> ""
Range("A" & intDataCnt).Select
intDataCnt = intDataCnt + 1
Loop
End Sub
これは、A1からセルの値を調べていって、
セルの値が何も入力されていないなら、そのセルを選択し、
変数intDataCntを1増やす。
ループを抜け出すのは、A列のセルが何も入力されていないセルを発見したとき
と言うことになります。
A1,A2,A3,A4,A5に X,Y,Z,12,3 と入力されていれば、セルA5を選択して
プログラムはS終了します。
|
|