|
γ様。こんにちは。ご多忙中、またもやコメントを頂き有難う御座います。
至れり尽くせり恐縮です。
>Sub test()
> Dim k As Long
>
> For k = 1 To 3
> '何もしない。主題ではないので。
> Next
> MsgBox k ' 4が表示されるはず
>End Sub
>の例で考えましょう。
>
>k を 1 から順に 1ずつ加算して処理を実行するのですが、
>k = 3 の処理を実行(この場合は何もしてませんが)した後で(Nextのところで)、
>3 に 1 を加算して、おっと これは 上限値 3 を超えているからループから脱出せよ、
>となるのです。
>
>ですから、 ループを抜けた段階では、 k は 4 になっていて良いのです。
>これは仕様です。
>
>ループを抜けた後で、ここでいう k という ループカウンタの値を使うことは
>めったにありません。k の役目はもう終わっているのです。
>
>つまり、
>> 2回目のIfの際に『J=10』が代入されているようになっていました。
>これは想定どおりで、おかしなことでも何でもありません。
→分かり易いよう、プログラムまで書いて頂きすみません。
お蔭様でこの点は完璧に理解できました。有難う御座いました!
>(2)
>> →ご指摘頂きました、End IfをEnd Subに変えるプログラムで自分が得たい
>> 回答を得ることができました!!
>ちょっと誤解があります。
>
>> 本来55以下を出力して欲しいので、
>> 7*8=56がaより大きくなる為、その前の7*7=49までを出力して欲しいのですが、
>> 6の段の54を出力した時点で止まってしまいます。
>という記述からすると、
>6 * 9 で終了してしまったらダメなはずで、
>7*1, 7*2 ・・・・ と実行させたいわけですから、私が書きましたように、
>以下のようにしたら良いでしょう。
>
>Sub 掛け算で答えが55以下を表示し、その後はループしない()
> Dim i As Long
> Dim j As Long
> Dim a As Long
> Dim sheetobj As Worksheet
>
> Set sheetobj = ThisWorkbook.Worksheets("Sheet1")
> With sheetobj
> a = 55
> For i = 1 To 9
> For j = 1 To 9
> If i * j > a Then
> Exit For
> Else
> .Cells(i + 1, j + 1).Value = i * j
> End If
> Next j
> Next i
> End With
> End Sub
>
>つづきは、どうぞトライしてみて下さい。
→こちらもプログラムを記載頂き申し訳ございません。ありがとうございます。
ただ、小生の日本語力が無いばかりに得たい結果をお伝えしきれなかったと
ころ、不甲斐なく思います。
上記でご提示頂きましたプログラムでは『55以下の回答を全て表示する』という
プログラムになると思います。
小生が作成したいものは『順番に数字を表示していき、55より大きい解が得
られたらそれを表示せずにそこまでの数字を表示する。つまり、7の段の
7*8=56が一番最初に55を超えますので、7*7=49までを表示させ、それ以降は
8の段、9の段は表示させない』ようにしたいのです。
ただ、今回ご教授頂いた下記2つのポイントを把握すればなんとか自力で辿りつけそ
うです。
1.For a =b to c は最後のa=cのループの際、next aから元にループするまでの間は a=c+1の数字を与えている。
2.F8キーを押すことで1つづつプログラムの動きを把握できる。
折角の日曜日に、これ以上γ様の貴重なお時間を頂くのは申し分けなさすぎます。
後は微力ながら自分で頑張ってみようと思います。本当にありがとうございました。
(と、威勢の良いことを申し上げましたが、もしまた分からなくなってしまった場合は厚かましながらご教授頂けますと嬉しいです♪)
|
|