Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10710 / 76734 ←次へ | 前へ→

【71569】Re:Do While Rangeについての質問
発言  ichinose  - 12/3/18(日) 17:48 -

引用なし
パスワード
   >つまりは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終了します。
12 hits

【71565】intDataCntについての質問 yoshimi 12/3/18(日) 15:16 質問
【71566】Re:intDataCntについての質問 ichinose 12/3/18(日) 16:00 発言
【71567】Re:intDataCntについての質問 yoshimi 12/3/18(日) 16:47 お礼
【71568】Do While Rangeについての質問 yoshimi 12/3/18(日) 16:52 質問
【71569】Re:Do While Rangeについての質問 ichinose 12/3/18(日) 17:48 発言
【71570】Re:Do While Rangeについての質問 yoshimi 12/3/18(日) 18:02 お礼
【71571】Re:Do While Rangeについての質問 ichinose 12/3/18(日) 18:33 発言

10710 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free