2015年9月28日月曜日

素数判定機

エクセルのVBAで書いた素数判定機です。TextBox1に数字をいれてボタンを押すと、その数字が素数かどうか判定します。プログラムの練習かなにかにお使いください。
まずは上のようにUserFormを作ります。TextBox1とTextBox2のなかにはそれぞれ「TextBox1」と「TextBox2」と書いてありますが、これは私がわかりやすくするために付け加えたもので、実際には表示されません。

コードは以下のようになります。この素数判定機を実際に使うときにはTextBox2のほうをLabelにするか、TextBox2をLockedにするといいかもしれません。
---------------------------------------------------------
Private Sub UserForm_Initialize()

TextBox1.SetFocus
TextBox2.Value = "Enter a number above"

End Sub

Private Sub CommandButton1_Click()
If Not IsNumeric(TextBox1.Value) Then
    TextBox2.Value = "Enter only numbers."
    Exit Sub
End If

If IsPrime(CLng(TextBox1.Value)) Then
    TextBox2.Value = "This is a prime number."
ElseIf Not IsPrime(CLng(TextBox1.Value)) Then
    TextBox2.Value = "This is not a prime number."
End If

End Sub

Function IsPrime(ByVal number As Long) As Boolean

    If number > 3 Then
        If number Mod 2 = 0 Then Exit Function
        If number Mod 3 = 0 Then Exit Function
    End If
 
    Dim divisor As Long
    Dim increment As Long
    Dim maxDivisor As Long
 
    divisor = 5
    increment = 2

    maxDivisor = Sqr(number) + 1
 
    Do Until divisor > maxDivisor
        If number Mod divisor = 0 Then Exit Function
        divisor = divisor + increment

        increment = 6 - increment
    Loop
 
    IsPrime = True
 
End Function