- Excel VBA 質問スレ Part43 [無断転載禁止]©2ch.net
972 :デフォルトの名無しさん[sage]:2016/11/17(木) 20:01:47.45 ID:ymY9UHmK - Option Explicit
を記述しないと Dim i, m, k As Integer Dim Re, Im As Single のように型宣言してもすべてVariant型として扱われてしまうのでしょうか?
| - Excel VBA 質問スレ Part43 [無断転載禁止]©2ch.net
979 :972[sage]:2016/11/17(木) 20:50:57.77 ID:ymY9UHmK - >>975
Public Sub BitRev() Dim i, m, k, N, tmp As Integer Dim X(8) As Integer N = 8 For i = 0 To N - 1 X(i) = Cells(i + 5, 3) Next i m = N / 2 'ビットリバース For i = 1 To N - 1 If m < i Then tmp = X(i): X(i) = X(m): X(m) = tmp End If k = N / 2 Do While m >= k m = m - k k = k / 2 Loop m = m + k Next i For i = 0 To N - 1 Cells(i + 5, 4) = X(i) Next i End Sub
| - Excel VBA 質問スレ Part43 [無断転載禁止]©2ch.net
980 :972 続き[sage]:2016/11/17(木) 20:51:38.46 ID:ymY9UHmK - 上記は FFT で使うビットリバース処理のコードです。これでうまくいくのですが、
N = 8 でコードを追っていてわからないところがあります。i ループの一番最後です。 i = 7: m = 7 tmp = X(7): X(7) = X(7): X(7) = tmp → X(7) = X7 つまり変化なし m = 7,k = 4 なので Do Loop 実行 m = m - k = 3: k = k/2 = 2 m = 3,k = 2 なので Do Loop 実行 m = m - k = 1: k = k/2 = 1 m = 1,k = 1 なので Do Loop 実行 m = m - k = 0: k = k/2 = 0 m = 0,k = 0 なので Do Loop 実行 ----> 無限ループになるのではないか? k はIntger で宣言されているので k=1 のとき k = k/2 = 0 になりそうな気がしますが、ウォッチ式 で確認すると k や m はVarian 型になるため無限ループに陥ることなく無事に終了します(笑)。 このへんがよくわからないのです。
| - Excel VBA 質問スレ Part43 [無断転載禁止]©2ch.net
983 :979[sage]:2016/11/17(木) 21:25:28.05 ID:ymY9UHmK - >>981
「な、何だってーーーーーーーーーーーーーーーー!!!」(wwwwwwww しかし、変な仕様だね。オリジナルのVBもそうなの?
|
|