最近、VBA マクロの一部として配列を使用することを学びました。それらが VBA を効果的に使用する上で不可欠な部分であることは理解しています。そのため、配列を効率的に処理する方法についてもっと学びたいと思います。少し調べてみたところ、いくつかの記事が見つかりましたが、何か重要な情報が不足している場合はお知らせください。
N 番目の素数を見つけるサブルーチンのコード例を次に示します。これは、素数の配列に対して試行除算を使用し、新しい素数を配列に動的に追加することによって行われます。
Sub FindNthPrime()
StartTime = Timer
Dim Counter, n, i As Single
Dim Primes() As Double 'An array of primes so far
Dim TestVal As Double
Dim PrimeTest As Boolean
n = 100000 'Find the n'th prime number
ReDim Primes(0)
Primes(0) = 2 'Start the array at 2
Counter = 1 'Start the Counter at 1
TestVal = 3 'Start testing with 3
Do Until Counter = n
PrimeTest = True
For i = 0 To UBound(Primes)
If Primes(i) > (TestVal ^ 0.5) Then Exit For
If TestVal Mod Primes(i) = 0 Then
PrimeTest = False
Exit For
End If
Next i
If PrimeTest = True Then
ReDim Preserve Primes(UBound(Primes) + 1)
Primes(UBound(Primes)) = TestVal
Counter = UBound(Primes) + 1
End If
TestVal = TestVal + 2
Loop
Debug.Print Primes(UBound(Primes))
Debug.Print Timer - StartTime
End Sub
基本的なベンチマーク テストでは、このコードは、配列を使用せずにブルート フォース トライアル除算アルゴリズム (テスト数の平方根までのすべての奇数をテスト) よりも優れていますが、それほどではありません。素数が大きくなるにつれて (この場合は 100,000 の素数)、私のマシンでは計算時間が 5 秒を超えています。
TL;DR: 上記のコードをより効率的にするためのヒントはありますか?