Excel VBA質問箱 IV

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

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


1844 / 13645 ツリー ←次へ | 前へ→

【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 発言[未読]

【71565】intDataCntについての質問
質問  yoshimi  - 12/3/18(日) 15:16 -

引用なし
パスワード
   VBAほんとの初心者です。
こんなことで質問をあげてしまい申し訳ないのですが、
質問させてください。

1.Dim intDataCnt As Integer

    intDataCnt = 1


2.intDataCnt = intDataCnt + 1

上記1.と2.はどのような意味を表しているのでしょうか。
intDataCntの定義がよくわかりません。

皆様のお力を貸していただけたら幸いです。

【71566】Re:intDataCntについての質問
発言  ichinose  - 12/3/18(日) 16:00 -

引用なし
パスワード
   こんにちは。

>1.Dim intDataCnt As Integer

>    intDataCnt = 1

>2.intDataCnt = intDataCnt + 1

>上記1.と2.はどのような意味を表しているのでしょうか。
>intDataCntの定義がよくわかりません。

Dim は、Dimensionの略です。
昔のBasicでは、変数宣言要らなかったのですが、
配列だけは、宣言しないと 引数が10以上は、使えないので
配列の宣言をDimを使って宣言していていました。
つまり、配列の次元を決めるので、Dimensionで略してDim
これが今では、全ての変数の宣言に使われているのだと思います。

よって、

intDataCntという名前を Integer-->整数型として、宣言します という意味

intDataCntは、何でも良いのです。i でも Aでも・・・。
でも、人間が分かりやすいような名前を変数には命名するようにします。

こういう観点からは、引用されたintDataCntは、素晴らしいよね!!

何となく、 整数型の変数で、カウンターとして使っている変数 なんてことが
想像しやすいもんね!!

>intDataCnt = 1

この宣言された変数 intDataCntに1を設定


>intDataCnt = intDataCnt + 1
 
変数intDataCntに1を足した値をintDataCntに設定する

よって、この時点で

msgbox intDataCnt

とすれば、2 が表示されますよね?

【71567】Re:intDataCntについての質問
お礼  yoshimi  - 12/3/18(日) 16:47 -

引用なし
パスワード
   ▼ichinose さん:

回答いただきありがとうございます。

つまりはintDataCntというのは数字そのものなんですね。

まだ、VBAを学習し始めたばかりなので
これからもここのサイトを利用させていただきますが、
何とぞよろしくお願いします。

【71568】Do While Rangeについての質問
質問  yoshimi  - 12/3/18(日) 16:52 -

引用なし
パスワード
   新たな質問です。

Do While Range("A" & intDataCnt).Value <> ""

上記の意味はどういう意味になるのでしょうか。

【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終了します。

【71570】Re:Do While Rangeについての質問
お礼  yoshimi  - 12/3/18(日) 18:02 -

引用なし
パスワード
   ▼ichinose さん:

分かりやすく解説していただきありがとうございました。

はい、これから質問する際には自分の考えも一緒に
投稿させていただきます。

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

引用なし
パスワード
   >セルの値が何も入力されていないなら、そのセルを選択し、
これ訂正です。セルに何か入力されていたら、そのセルを選択し、

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