第5講 Subプロシージャ

第4話 素数判定Subプロシージャ

素数判定マクロコード例
Private Sub CommandButton1_Click()

  Dim n As Integer

  n = Cells(5, 2)
  f (n)

End Sub

Sub f(n As Integer)

  Dim i As Integer, r As Integer

  If n = 2 Then
    Cells(6, 2) = "素数である"
    Exit Sub
  End If

  If n Mod 2 = 0 Then
    Cells(6, 2) = "素数でない"
    Exit Sub
  End If

  r = Sqr(n)
  For i = 3 To r Step 2
    If n Mod i = 0 Then
      Cells(6, 2) = "素数でない"
      Exit Sub
    End If
  Next
  Cells(6, 2) = "素数である"

End Sub

Private Sub CommandButton2_Click()

  Range("B5,B6").Select
  Selection.ClearContents
  Cells(1, 1).Select

End Sub
実行画面例
i001i002

さて、このマクロを改良して、1から与えられた数までのすべての素数を表示するマクロを考えましょう。
i003
i004
(求める範囲の右のセルは大きな値を入力できるように3つのセルを結合しています。
やり方は、結合するセルに範囲(ドラッグによる)→右クリック→セルの書式設定→配置(セルを結合するにチェック))
i005
素数の判定はプロシージャにやらせるとなると、
素数の数を数えるのに、グローバル変数を用意する必要があります。
プロシージャはその独立性のため、変数が使える範囲はそのプロシージャ内に限られます。
プロシージャ内でしか使えない変数をローカル変数といいます。
つまり、プロシージャの変数はすべてローカル変数なのです。
それに対して、プロシージャを超えてすべてで使える変数をグローバル変数にする必要があります。
グローバル変数を宣言するには、
Dim cn As Long

Private Sub CommandButton1_Click()
      ・
      ・
      ・
End Sub


Sub f(n As Long)
      ・
      ・
      ・
End Sub


Private Sub CommandButton2_Click()

  Columns("B:U").Select
  Selection.ClearContents

  Cells(1, 1).Select

End Sub

のようにコードの冒頭で宣言すればよいのです。
i006
これを実現するためには、Subプロシージャfを呼び出す側にもFor文を使う必要があります。
では皆さん考えてみてください。



第3話へ 第5話へ

004


vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ

数学研究室に戻る