ここから本文です

「Do~Loop Until」で掛け算九九の表を作るマクロ

to_********さん

2010/1/1815:49:10

「Do~Loop Until」で掛け算九九の表を作るマクロ

私はこのように作りました。

y=1
do
x=1
do
cells(y,x).value=x*y
y=y+1
Loop Until y = 10
x=x+1
Loop Until x =10


ですが、回答を見るとxとyの位置が違っています。
確かに、私の書いたマクロでは動きません。
でも、なぜ間違えているのか分からないのです。
(なぜ間違えているのか分からないため、何度も何度も
解いているが、正解できない)

納得できる説明をお願いします。




ちなみに、回答ではこうなっています。

y = 1
Do
x = 1
Do
Cells(y, x).Value = x * y
x = x + 1
Loop Until x = 10
y = y + 1
Loop Until y = 10

閲覧数:
1,653
回答数:
3
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

hid********さん

2010/1/1910:01:28

見させてもらって感じたことを書きます。
内部の
x=1
do
cells(y,x).value=x*y
y=y+1
loop until y=10
の部分で、do文が終了すると、(yが10になると)最上部の「do」に戻り
y=1 ←これはもう実行されない、一度実行されているから
do
上記のプログラム
x=x+1
loop until x=10
となります。
この状態だと、「x=x+1」を実行しても、また「上記のプログラム」中で『x=1』となり、xは1より大きくなれません。
そしてまた、yは1にならず10より大きくなり(行の最後まで行きます)
したがって、もう「loop until y=10」がきかず、回答者の方も書いておられますが「上記のプログラム」で無限ループに陥ります。
「do~loop until」を使われるときは
変数の初期設定
do
作業
変数の操作(加算・減算等)
loop until 変数の判断
のようになかたまりで使われたら良いのではないでしょうか?
もし使えるのであれば、ブレークポイントを設定して
ウォッチ式で変数の値を見られることをお勧めします。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

rir********さん

2010/1/1910:28:37

複数のDo-Loopを組み合わせると、意図したように動かないときがありますね。
こういう時は、Do-Loopの入れ子の関係を整理すると同時に、デバックモードで動かしながら検証したほうが早いです。
以下説明です。

□誤答
どのような挙動をして、無限ループになるかを①から⑨まで追ってコメントしてあります。
yが10になったら、xを1加算して、次の段に行く前に、x=1再度元に戻っているため、無限にx=1での計算が続きます。

y = 1
Do '④ループ継続
x = 1 '⑤xがリセットされるため、x=1、y=10となる。
Do '⑥ループ継続
Cells(y, x).Value = x * y '⑦x=1、y=10
y = y + 1 '⑧yが1加算される。x=1、y=11
Loop Until y = 10 '①y=10まで行くといったんループを抜ける
'⑨以降y=10となることはないので無限ループとなる。
x = x + 1 '②xが1つ加算され、x=2、y=10となる。
Loop Until x = 10 '③x=10でないので、ループ継続

□正答
y = 1
Do '一の段・二の段・三の段・・・とDO-LOOPで繰り返す。
x = 1
Do '各段で、一づつ加算しながらDO-LOOPで掛け算を繰り返す。Y一・Y二・Y三・・・Y九
Cells(y, x).Value = x * y
x = x + 1
Loop Until x = 10 'Xが10までいったら
y = y + 1 '次のY(次の段)へ行く
Loop Until y = 10 '以降九の段まで行き、Yが10までいったら終了。

end********さん

2010/1/1815:55:03

外側のDo-Loopでは、xが10まで動く事を望んでいると思うけど
毎回xを1に戻しているから、無限ループにはいらないかな

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる