- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
4#
發表於 2013-11-29 08:21
| 只看該作者
本帖最後由 GBKEE 於 2013-11-29 09:57 編輯
回復 3# stevenliu555
工作表VLookup的範圍要用Double(雙精度浮點數)
原本程式中 iLo_St_Ret(2 To 241, 1 To 5) As Single(單精度浮點數) ,是所造成的錯誤的原因- Sub MainProgram()
- 'Dim iWi_St_Ret(2 To 241, 1 To 5), iLo_St_Ret(2 To 241, 1 To 5) As Single '只有iLo_St_Ret有指定型態
- 'Dim iWi_St_Ret_Perf(2 To 241, 1 To 5) As Single, iLo_St_Ret_Perf(2 To 241, 1 To 5) As Single '都有指定型態
- Dim iWi_St_Ret() As Double '雙精度浮點數
- Dim iLo_St_Ret() As Double '() 動態陣列
- Dim iWi_St_Ret_Perf() As Double
- Dim iLo_St_Ret_Perf() As Double
- Dim i, j, k, n As Integer
- Dim c, r As Integer
- Dim data As Range
- iRowNo = Sheets("個股報酬率").Range("A65536").End(xlUp).Row
- iColumnNo = Sheets("個股報酬率").Range("HV1").End(xlToLeft).Column
- 'ReDim 陳述式 在程序層次中用來重新配置動態陣列變數的儲存空間。
- ReDim iWi_St_Ret(2 To iColumnNo, 1 To 5)
- ReDim iLo_St_Ret(2 To iColumnNo, 1 To 5)
- ReDim iWi_St_Ret_Perf(2 To iColumnNo, 1 To 5)
- ReDim iLo_St_Ret_Perf(2 To iColumnNo, 1 To 5)
- For j = 2 To iColumnNo
- For i = 1 To 5
- 'iWi_St_Ret_Perf(j, i) = 0 '不必為0
- 'iLo_St_Ret_Perf(j, i) = 0
- Debug.Print iWi_St_Ret(j, i)
- iWi_St_Ret(j, i) = Application.WorksheetFunction.Large(Range(Cells(2, j), Cells(iRowNo, j)), i)
- iLo_St_Ret(j, i) = Application.WorksheetFunction.Small(Range(Cells(2, j), Cells(iRowNo, j)), i)
- 'Set data = Range(Cells(j, 2), Cells(100, j + 1)) '另一錯誤點 Cells(j, 2)=>一直是B欄
- 'Set data = Range(Cells(2, j), Cells(100, j + 1)) '欄位隨著j
- Set data = Range(Cells(2, j), Cells(iRowNo, j + 1)) '建議列位用 iRowNo
- 'Debug.Print data.Address '可看看範圍
- iWi_St_Ret_Perf(j, i) = Application.VLookup(iWi_St_Ret(j, i), data, 2, False)
- iLo_St_Ret_Perf(j, i) = Application.VLookup(iLo_St_Ret(j, i), data, 2, False)
- Next i
- Next j
- End Sub
複製代碼 |
|