第12講 For文以外の様々なループ文
第11話 条件式自身の値とDo文の強制終了
皆さん、参考ダウンロード添付ファイル を開いて下さい。
シート
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講では、素数探索プログラムを考えます。
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入門へ
本サイトトップへ