Excel VBA質問箱 IV

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

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


6852 / 76733 ←次へ | 前へ→

【75477】Re:九九を途中で止めるプログラムを作成したいのですが…
発言  γ  - 14/4/13(日) 13:58 -

引用なし
パスワード
   (1)
>  早速試しに実行してみたところ、やはりFor j =1 to 9としていますが、
>  2回目のIfの際に『J=10』が代入されているようになっていました。
>  (この考察が誤りでしたら厚かましながら今一度コメントを頂けますと幸甚です。)

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


つづきは、どうぞトライしてみて下さい。
2 hits

【75474】九九を途中で止めるプログラムを作成したいのですが… ガイツ 14/4/13(日) 3:19 質問
【75475】Re:九九を途中で止めるプログラムを作成したい... γ 14/4/13(日) 9:07 発言
【75476】Re:九九を途中で止めるプログラムを作成したい... ガイツ 14/4/13(日) 12:11 お礼
【75477】Re:九九を途中で止めるプログラムを作成したい... γ 14/4/13(日) 13:58 発言
【75478】Re:九九を途中で止めるプログラムを作成したい... ガイツ 14/4/13(日) 17:00 お礼
【75479】Re:九九を途中で止めるプログラムを作成したい... γ 14/4/13(日) 17:56 発言
【75490】Re:九九を途中で止めるプログラムを作成したい... ガイツ 14/4/14(月) 20:50 お礼

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