[VBA] 条件分枝の入れ子 (ネスト)

 数学マクロ入門講座第12回です。前回のマクロをちょっと作り変えて、入力した数値の約数を求められるようにしてみます。

条件分枝の入れ子 (ネスト)

 前回のマクロを少し書き換えてみます。

Sub Divisor()

  Dim i As Long, j As Double

  j = InputBox("整数を入力してください")

  If j <> Int(j) Then

    MsgBox "整数ではありません"

  Else

    For i = 1 To j
      If j Mod i = 0 Then
        Debug.Print i;
      End If
    Next i

  End If

End Sub

 マクロを実行すると数値の入力を促されます。たとえば「 40 」と入力すると、

1 2 4 5 8 10 20 40

というように 40 の約数が全て並びます。整数以外の値を入力すると「整数ではありません」というメッセージが表示されます。

 変数 i は Long型(長整数型)という非常に大きな桁の整数を扱える型で宣言しています。Integer型の上限値が 32,768 であるのに対して、Long 型の上限値は 2,147,483,647 となっています。なのでたとえば

7862422

という大きな値を入力しても

1, 2, 29, 58, 135559, 271118, 3931211, 7862422

というようにちゃんと約数を並べてくれます。

 If...Then...Elseステートメントが2つありますね。最初の条件分枝で

If j <> Int(n) Then

は「入力された数値が整数でないならば」という文です。これが真である、つまり j が整数でない場合は「整数ではありません」というメッセージを表示して、 Else 以下の処理は全部とばして一番最後の End If まで行きます。つまりそれでプログラムは終わりということです。この条件文を満たさない場合、つまり j が整数である場合には Else 以下の処理で約数を求めます。

 ユーザーさんにインプットボックスから値を入力してもらって j に格納していますが、これは

For i = 1 To j

というループ処理の上限値となっています。j に 40 が入力されたら

For i = 1 To 40

という処理を行い、j に 100 が入力されたら

For i = 1 To 100

という処理を行うということです。プログラミングでは、どの変数がどのように動くのかということを丁寧に把握しておく必要があります。次回は「ユーザーさんが意味不明な値を入力」した場合にも対応できるように、適切なエラー処理のできるプログラムに変えてみます。

 ≫ エラー処理をします
 ≫ 数学マクロ講座トップページへ戻る

コメントをどうぞ

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください