トップページ > プログラム > 2016年11月17日 > ymY9UHmK

書き込み順位&時間帯一覧

12 位/206 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000000031004



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
972
972 続き
979
Excel VBA 質問スレ Part43 [無断転載禁止]©2ch.net

書き込みレス一覧

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もそうなの?


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。