VBA講座12 入力された数値の約数を返します

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

任意の数字の約数を求めます

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

 Sub 約数()

 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 以下の処理で約数を求めます。

i を 1 から j まで動かします

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

For i = 1 To j

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

For i = 1 To 40

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

For i = 1 To 100

という処理を行うということです。プログラミングでは、どの変数がどのように動くのかということを丁寧に把握しておく必要があります。

 次回は「ユーザーさんが意味不明な値を入力」した場合にも対応できるように、適切なエラー処理のできるプログラムに変えてみます。

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

スポンサーリンク
末尾広告
末尾広告

コメントをどうぞ

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

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