第12講 For文以外の様々なループ文
第9話 限界値を超えない和プログラム
1に対して、
Do While文の方は
2
であるのに対して、Do...Loop While文の方は
3
という結果になります。
なぜ、違いが出てくるのでしょうか。
前判断の場合は、
Function f1(m As Long, n As Long, h As Long)

  Dim w As Long, i As Long
  i = m
  Do While i <= n
    w = w + i
    i = i + h
  Loop
  f1 = w
  
End Function
10 <=5 ですから、条件式は偽です。
条件式が真のときのみ処理を実行しますから、
1回も処理されずDo文は終了となってしまいます。
それに対して、後判断の場合は
Function f1(m As Long, n As Long, h As Long)

  Dim w As Long, i As Long
  i = m
  Do
    w = w + i
    i = i + h
  Loop While i <= n
  f1 = w
  
End Function
判断をするのは、処理が終了してからですから、1回は処理することになります。
つまり、条件式がはじめから偽であるとき、前判断では1回も処理されないのに対して、
後判断では、条件式が偽であっても1回は処理されるのです。
ですから、偽であっても1回は処理をさせたい場合に後判断を使います。


シートを少し変更して、
4
5
合計上限値を超えない範囲で合計させるように課題を変更します。
例えば、はじめの値が1、合計上限値が100、変化の幅が1なら、
1+2+3+・・・の計算を合計が100を超えない範囲で行わせるということです。
どのようにコードを変更したらよいでしょうか。
うっかりすると、
Do While文の場合は
Function f1(m As Long, n As Long, h As Long)

  Dim w As Long, i As Long
  i = m
  While w <= n
    w = w + i
    i = i + h
  Wend
  f1 = w
  
End Function
Function f2(m As Long, n As Long, h As Long)

  Dim w As Long, i As Long
  i = m
  While w <= n
    w = w + i * i
    i = i + h
  Wend
  f2 = w
  
End Function
Function f3(m As Long, n As Long, h As Long)

  Dim w As Long, i As Long
  i = m
  While w <= n
    w = w + i * i * i
    i = i + h
  Wend
  f3 = w
  
End Function
Function f4(m As Long, n As Long, h As Long)

  Dim w As Long, i As Long
  i = m
  While w <= n
    w = w + i * i * i * i
    i = i + h
  Wend
  f4 = w
  
End Function

Do...Loop While文の場合は、
Function f1(m As Long, n As Long, h As Long)

  Dim w As Long, i As Long
  i = m
  Do
    w = w + i
    i = i + h
  Loop While w <= n
  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
    w = w + i * i
    i = i + h
  Loop While w <= n
  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
    w = w + i * i * i
    i = i + h
  Loop While w <= n
  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
    w = w + i * i * i * i
    i = i + h
  Loop While w <= n
  f4 = w
  
End Function
としてしまいますが、どちらも
03
と100を越えてしまします。
何が問題なのでしょうか。
どのように改善したらよいのでしょうか。>





第7話へ 第9話へ
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入門へ
本サイトトップへ