Excel VBA | 配列を返す関数

VBA
スポンサーリンク

「指定した数までの素数を返す関数」を作ってみましょう。素数とは「1と自分自身以外では割り切れない数」のことです。


サンプルコード

Function GetPrimes(ByVal maxNum As Integer) As Variant
    Dim arr() As Integer
    Dim i As Integer, j As Integer
    Dim isPrime As Boolean
    Dim count As Integer
    
    ' 素数の数を数えるために一時的な配列を使う
    Dim temp() As Integer
    ReDim temp(1 To maxNum)
    count = 0
    
    For i = 2 To maxNum
        isPrime = True
        ' 2から√iまでで割り切れるかチェック
        For j = 2 To Int(Sqr(i))
            If i Mod j = 0 Then
                isPrime = False
                Exit For
            End If
        Next j
        
        If isPrime Then
            count = count + 1
            temp(count) = i
        End If
    Next i
    
    ' 必要なサイズで配列を作り直す
    ReDim arr(1 To count)
    For i = 1 To count
        arr(i) = temp(i)
    Next i
    
    GetPrimes = arr
End Function
VB

呼び出し例

Sub TestPrimes()
    Dim primes As Variant
    Dim i As Integer
    
    primes = GetPrimes(30)   ' → {2,3,5,7,11,13,17,19,23,29} が返る
    
    For i = LBound(primes) To UBound(primes)
        Debug.Print primes(i)
    Next i
End Sub
VB

解説

  • For i = 2 To maxNum
    → 2から指定した数までを順番にチェック
  • For j = 2 To Int(Sqr(i))
    → √i までの数で割り切れるか確認(効率アップ)
  • isPrime が True のままなら素数として配列に追加
  • 最後に必要なサイズの配列に詰め直して返す

ポイント

  • 素数判定は「割り切れる数があるかどうか」を調べるだけ
  • √n まで調べれば十分なので効率的
  • 配列を返すことで「複数の素数」をまとめて扱える

👉 この関数を応用すれば「素数の個数を返す」「素数の合計を返す」なども簡単に作れます。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました