|    | 
     >つまりは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終了します。 
 | 
     
    
   |