このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

【VBA】素数を書き出すプログラム

素数を書き出すプログラム

今回は素数を書き出すサンプルプログラムを紹介します。

VBAに慣れ始めると、ちょっと遊んでみたくなることがあります。

そんなときに素数の計算などは少しホネがあって、面白いと思います。

この記事では、素数を計算する単純なアルゴリズムと、素数を書き出すプログラムをお見せします。

自分でやってみたいという方はアルゴリズムを見て、素数を出力するプログラムを作成してみてください。
(プログラムは後で答え合わせとしてはみてはどうでしょうか)

VBAが難しいと感じたら
VBAのプロに代わりに作ってもらうのはいかがでしょうか?
ココナラでVBAの作成請負を受け付けています。お気軽にご相談ください。

素数を判定するアルゴリズム

先に、値が素数かどうかを判定するアルゴリズムについて簡単に説明します。

ここで説明する方法をプログラムで使います。

2, 3, …√Nで割り切れるか調べる

1とその数自身との外には約数がない正の整数。

素数の定義はこのようになります。

2, 3, …と割る値を増やしていって、割り切れる値がないかを確認します。割り切れなければ素数です。

単純な方法なのですが、ポイントとなるのは割る値をどこまで確認する必要があるかです。

素数か確認する値をNとします。2,3,…,Nまで割って割り切れる値がNだけであればNは素数と分かります。

ですが、実際はNまで調べる必要はなく、√Nまで確認できればOKです。

割り切れるということはN = a * b が成り立ちます。

もし、aが√Nよりも大きな値だとすると、bは√Nより小さな値となります。

そのため、a=2,3,…と順番に増やしていったとして、もしNが√Nより大きな値aで割り切れるなら、それに対応する√Nより小さな値bが存在します。

Nを割る数は、2,3,…と順番に増やしているので、この小さな値bに先に到達するはずです。

そのため、√Nで割り切れるかを確認できたら終わりで、割り切れなければ素数であることが確定します。

素数を書き出すプログラム

Sub OutPutPrimeNumber()
    '''素数をシート上に書き出す
    
    Dim out_row As Long
    Dim n As Long
    
    ''1~1000の中にある素数だけ書き出す
    For n = 1 To 1000
        If IsPrimeNumber(n) Then
            out_row = out_row + 1
            Cells(out_row, 1) = n
        End If
    Next
End Sub

Function IsPrimeNumber(n As Long) As Boolean
    '''nが素数であるか判定する
    
    If n = 1 Then IsPrimeNumber = False: Exit Function '1は素数でない
    If n = 2 Or n = 3 Then IsPrimeNumber = True: Exit Function '2と3は素数
    If n Mod 2 = 0 Then IsPrimeNumber = False: Exit Function '2で割り切れる⇒素数でない
    
    ''2で割れないことを確認済なので奇数のみ確認
    Dim i As Long
    For i = 3 To n Step 2
        
        ''割り切れたら素数でない
        If n Mod i = 0 Then IsPrimeNumber = False: Exit Function
    
        ''iが√Nより大きいなら素数
        If i > n ^ (1 / 2) Then IsPrimeNumber = True: Exit Function
    Next
End Function

このプログラムを実行すると、シート上に1~1,000の間にある素数が順番に書き出されます。

素数判定はIsPrimeNumberという関数で行っています。

ステップ実行して、どのような処理をしているか調べてみてください。

VBAが難しいと感じたら
VBAのプロに代わりに作ってもらうのはいかがでしょうか?
ココナラでVBAの作成請負を受け付けています。お気軽にご相談ください。

VBA

Posted by やろまい