第12講 For文以外の様々なループ文
第11話 条件式自身の値とDo文の強制終了
皆さん、参考ダウンロード添付ファイル を開いて下さい。
シート
1
VBAコード
Private Sub CommandButton1_Click()
  
  Range("C6").Select
  Selection.ClearContents
  Dim m As Long, n As Long, h As Long
  If Cells(4, 2) = "" Or Cells(5, 2) = "" Or Cells(6, 2) = "" Then
    Cells(6, 3) = "入力欄をすべて埋めてから再び実行ボタンを押してください。"
    GoTo tobi
  End If
  m = Cells(4, 2)
  n = Cells(5, 2)
  h = Cells(6, 2)
  Cells(7, 6) = f1(m, n, h)
  Cells(8, 6) = f2(m, n, h)
  Cells(9, 6) = f3(m, n, h)
  Cells(10, 6) = f4(m, n, h)
tobi:
  Cells(1, 1).Select
  
End Sub
Function f1(m As Long, n As Long, h As Long)

  Dim w As Long, i As Long
  i = m
  Do While 1
    w = w + i
    i = i + h
    If w Mod n = 0 Then Exit Do
  Loop
  f1 = w
  
End Function
Function f2(m As Long, n As Long, h As Long)

  Dim w As Long, i As Long
  i = m
  Do While 1
    w = w + i * i
    i = i + h
    If w Mod n = 0 Then Exit Do
  Loop
  f2 = w
  
End Function
Function f3(m As Long, n As Long, h As Long)

  Dim w As Long, i As Long
  i = m
  Do While 1
    w = w + i * i * i
    i = i + h
    If w Mod n = 0 Then Exit Do
  Loop
  f3 = w
  
End Function
Function f4(m As Long, n As Long, h As Long)

  Dim w As Long, i As Long
  i = m
  Do While 1
    w = w + i * i * i * i
    i = i + h
    If w Mod n = 0 Then Exit Do
  Loop
  f4 = w
  
End Function
Private Sub CommandButton2_Click()
  
  Range("B4:B6,F7:F11,C6").Select
  Selection.ClearContents
  Range("A1").Select
  
End Sub

これは、合計値がB5に入力されている値の倍数になったら、
ループ文を強制的に抜けるマクロです。
Exit DoでDo文を強制的に止めることが出来るわけです。

皆さん、実は
Do While 条件式
     ・
     ・
     ・
Loop
条件式は、条件式自身が値を持もちちます。
条件式が値をもつというと?が浮かぶでしょうが、
コンピュータは、0と1の2進数であらゆる処理を行っています、
ループ処理を行うか行わないかの判断も、
0,1でなされるのです。
条件式がもつ値は、0か1です。
条件式が真であるとき1、偽であるとき0なのです。
例えば『3 < 5』は真ですから、3 < 5自身の値は1です。
また、『5 < 3』なら、5 < 3自身の値は0です。
だから、コンピュータは次のように判断しています。
条件式の内容を見ているではなく、条件式自体の値を見ています。
条件式自体の値が1なら処理を実行し、0なら処理をしないようになっています。
だから、Do文を実行させるには、
Do While 1
     ・
     ・
     ・
Loop
でよいのです。ただし、これだと永久ループになってしまうので、
Do While 1
     ・
     ・
  If 条件式 Then Exit Do
Loop
という風に、
If 条件式 Then Exit Doの1文を入れます。


ループ文の終了時点が、合計値が素数になったときなど、
判断基準が制御変数側にないまたはループ文の外部(ファンクションプロシージャ)にあるときなどは、
For文を使うよりDo文を使う方が優れているといえるでしょう。

これで第13講を終わりにします。
第14講では、素数探索プログラムを考えます。


第10話へ 第13講第1話へ
004

eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
vc++講義へ
excel 2013 2010 2007 vba入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門へ
小学生からエンジニアまでのRuby入門へ
本サイトトップへ