[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『違いを教えてください。』(みちこ)
Sub 連番()
Dim i
Dim j
Dim k
i = 1
k = 1
Do While i <= 10
j = i
Do While j <= 10
Cells(i, j) = k
k = k + 1
j = j + 1
Loop
i = i + 1
Loop
End Sub
Sub Macro1()
Dim i Dim j Dim k i = 1 k = 1 Do While i <= 10 j = 1 Do While j <= 10 Cells(i, j) = k k = k + 1 j = j + 1 Loop i = i + 1 Loop End Sub
連番のマクロを実行するとしたのような結果になり 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 macro1のほうを実行すると 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 のような結果になります。 同じようなコードを書いたつもりなのですが、どうして、このような結果の違いになりますか?最近勉強し始めたばかりで、教えていただければ助かります。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
同じようなでも、同じじゃないですよね。 j = i と j = 1 の違いが、結果の違いになっています。
動作を確認するときに、F8を押しながら、マウスを変数の上に置いたり、「ウォッチ」 ウィンドウに変数をドロップしてから、F8 でステップ実行すると、マクロがどのように 動いているか確認できると思います。
『デバッグトレースの開始方法』
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_030.html
マクロを修得するには、まずステップ実行やデバッグを覚えるとよいかと思います。
(Mook) 2015/03/01(日) 21:05
Mookさんともろかぶりですが、メモッたのでアップします。
よ〜く、目を凝らして眺めると、1点、異なってますね。
連番では j = i Macro1では j = 1
それより、マクロを勉強したところなら、今のうちに、コードにきちんとインデントをつける習慣を。 見事に(?)1桁目からコード記述がなされているけど、このように書くんだという参考書があるんでしょうか? (最近、いろんな人が、この見事なまでの1桁目開始コードをアップしているので、どこかに、そのように指導する参考書があるのかなと)
Sub 連番() Dim i Dim j Dim k
i = 1 k = 1 Do While i <= 10 j = i Do While j <= 10 Cells(i, j) = k k = k + 1 j = j + 1 Loop i = i + 1 Loop
End Sub
Sub Macro1()
Dim i Dim j Dim k i = 1 k = 1 Do While i <= 10 j = 1 Do While j <= 10 Cells(i, j) = k k = k + 1 j = j + 1 Loop i = i + 1 Loop
End Sub
(β) 2015/03/01(日) 21:07
ついでに。 連番 と Macro1 とどちらがやりたいことかわかりませんが、ループの範囲があらかじめ わかっているのであれば、For 文を使うと見やすくなる気がします。
Sub Sample() Dim i As Long Dim j As Long Dim k As Long
k = 1 For i = 1 To 10 For j = 1 To 10 Cells(i, j) = k k = k + 1 Next Next End Sub (Mook) 2015/03/01(日) 21:40
インデントについては、単に見やすくするためのものなのでしょうか?
グループごとにインデントをつけるのか、逆にどの頻度でインデントをつけるかの記述がなくて、
本等では、インデントはついてますが、それがどのような法則でつけられてるかがいまいちわからなくて、
とりあえず、1桁目開始している次第です…。
(みちこ) 2015/03/01(日) 22:49
>インデントについては、単に見やすくするためのものなのでしょうか? そうです。 見やすくするためなのですが、コードが見やすいことは大事なことです。
インデントを付けるのは、 IF 〜 End If For 〜 Next Do 〜 Loop など、構文の最初と終わりで同じ位置にすることにより、構文の範囲が明確になります。
とりあえず見様見真似でも良いので、インデントを習慣にした方が良いでしょう。 (Mook) 2015/03/01(日) 22:57
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.