Excel VBA | 配列を返す関数

VBA
スポンサーリンク

「指定範囲の素数を返す関数」を作ってみましょう。今回は 開始値と終了値を引数に渡して、その範囲内の素数を配列で返す 関数です。


サンプルコード

Function GetPrimesInRange(ByVal startNum As Integer, ByVal endNum As Integer) As Variant
    Dim arr() As Integer
    Dim temp() As Integer
    Dim i As Integer, j As Integer
    Dim isPrime As Boolean
    Dim count As Integer
    
    ' 一時的な配列を最大サイズで確保
    ReDim temp(1 To endNum)
    count = 0
    
    For i = startNum To endNum
        If i >= 2 Then
            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
        End If
    Next i
    
    ' 必要なサイズで配列を作り直す
    ReDim arr(1 To count)
    For i = 1 To count
        arr(i) = temp(i)
    Next i
    
    GetPrimesInRange = arr
End Function
VB

呼び出し例

Sub TestPrimesRange()
    Dim primes As Variant
    Dim i As Integer
    
    primes = GetPrimesInRange(10, 50)   ' → {11,13,17,19,23,29,31,37,41,43,47}
    
    For i = LBound(primes) To UBound(primes)
        Debug.Print primes(i)
    Next i
End Sub
VB

解説

  • startNumendNum を引数に渡すことで範囲を指定
  • 素数判定は「2~√nまで割り切れるか」をチェック
  • 一時配列 temp に素数を格納し、最後に必要なサイズの配列に詰め直して返す
  • 呼び出し例では 10~50の素数が返る

応用ポイント

  • 範囲を自由に指定できるので「100~200の素数」なども簡単に取得可能
  • 素数のリストを返すだけでなく「素数の個数」や「合計値」を返す関数に発展させられる

👉 次のステップとして「指定範囲の素数の合計値を返す関数」に挑戦すると、さらに実用的になります。

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