返回列表 上一主題 發帖

[發問] 為什麼VLOOKUP不能執行?

回復 1# stevenliu555

請查看這裡的 討論
  1. Sub MainProgram()
  2. Dim iWi_St_Ret(2 To 241, 1 To 5), iLo_St_Ret(2 To 241, 1 To 5) As Single
  3. Dim iWi_St_Ret_Perf(2 To 241, 1 To 5), iLo_St_Ret_Perf(2 To 241, 1 To 5) As Single
  4. Dim i, j, k, n As Integer
  5. Dim c, r As Integer
  6. Dim data As Range
  7. Dim A As Variant      '加這變數 ****

  8. iRowNo = Sheets("個股報酬率").Range("A65536").End(xlUp).Row
  9. iColumnNo = Sheets("個股報酬率").Range("HV1").End(xlToLeft).Column

  10. For j = 2 To iColumnNo
  11.     For i = 1 To 5
  12.         iWi_St_Ret_Perf(j, i) = 0
  13.         iLo_St_Ret_Perf(j, i) = 0
  14.         iWi_St_Ret(j, i) = Application.WorksheetFunction.Large(Range(Cells(2, j), Cells(iRowNo, j)), i)
  15.         iLo_St_Ret(j, i) = Application.WorksheetFunction.Small(Range(Cells(2, j), Cells(iRowNo, j)), i)
  16.         Set data = Range(Cells(j, 2), Cells(100, j + 1))
  17.         A = Application.VLookup(iWi_St_Ret(j, i), data, 2, False)
  18.         'A =>有找到傳回數值,反之 傳回錯誤值
  19.         iWi_St_Ret_Perf(j, i) = IIf(Not IsError(A), A, 0)
  20.         A = Application.VLookup(iLo_St_Ret(j, i), data, 2, False)
  21.         iLo_St_Ret_Perf(j, i) = IIf(Not IsError(A), A, 0)
  22.     Next i
  23. Next j
  24. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2013-11-29 09:57 編輯

回復 3# stevenliu555
工作表VLookup的範圍要用Double(雙精度浮點數)
原本程式中 iLo_St_Ret(2 To 241, 1 To 5) As Single(單精度浮點數) ,是所造成的錯誤的原因
  1. Sub MainProgram()
  2. 'Dim iWi_St_Ret(2 To 241, 1 To 5), iLo_St_Ret(2 To 241, 1 To 5) As Single  '只有iLo_St_Ret有指定型態
  3. '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  '都有指定型態

  4. Dim iWi_St_Ret() As Double  '雙精度浮點數
  5. Dim iLo_St_Ret() As Double  '() 動態陣列
  6. Dim iWi_St_Ret_Perf() As Double
  7. Dim iLo_St_Ret_Perf() As Double
  8. Dim i, j, k, n As Integer
  9. Dim c, r As Integer
  10. Dim data As Range
  11. iRowNo = Sheets("個股報酬率").Range("A65536").End(xlUp).Row
  12. iColumnNo = Sheets("個股報酬率").Range("HV1").End(xlToLeft).Column
  13. 'ReDim 陳述式  在程序層次中用來重新配置動態陣列變數的儲存空間。
  14. ReDim iWi_St_Ret(2 To iColumnNo, 1 To 5)
  15. ReDim iLo_St_Ret(2 To iColumnNo, 1 To 5)
  16. ReDim iWi_St_Ret_Perf(2 To iColumnNo, 1 To 5)
  17. ReDim iLo_St_Ret_Perf(2 To iColumnNo, 1 To 5)

  18. For j = 2 To iColumnNo
  19.     For i = 1 To 5
  20.         'iWi_St_Ret_Perf(j, i) = 0     '不必為0
  21.         'iLo_St_Ret_Perf(j, i) = 0
  22.        Debug.Print iWi_St_Ret(j, i)
  23.         iWi_St_Ret(j, i) = Application.WorksheetFunction.Large(Range(Cells(2, j), Cells(iRowNo, j)), i)
  24.         iLo_St_Ret(j, i) = Application.WorksheetFunction.Small(Range(Cells(2, j), Cells(iRowNo, j)), i)
  25.         'Set data = Range(Cells(j, 2), Cells(100, j + 1))  '另一錯誤點 Cells(j, 2)=>一直是B欄
  26.         'Set data = Range(Cells(2, j), Cells(100, j + 1))  '欄位隨著j
  27.         Set data = Range(Cells(2, j), Cells(iRowNo, j + 1)) '建議列位用 iRowNo
  28.         'Debug.Print data.Address             '可看看範圍
  29.         iWi_St_Ret_Perf(j, i) = Application.VLookup(iWi_St_Ret(j, i), data, 2, False)
  30.         iLo_St_Ret_Perf(j, i) = Application.VLookup(iLo_St_Ret(j, i), data, 2, False)
  31.     Next i
  32. Next j
  33. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 5# c_c_lai
4#已更正,又掉芝麻了,感謝告知,
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 7# stevenliu555
  1. Option Explicit
  2. Sub Ex()
  3. Dim Ar(1 To 5, 1 To 10)
  4.     Ar(1, 1) = 1   'Ar(1, 1)等同[A1:J5].Cells(1,1)
  5.     Ar(5, 10) = 50 'Ar(5, 10)等同[A1:J5].Cells(5,10)
  6.     [A1:J5].Cells(1, 1) = Ar(1, 1)
  7.     [A1:J5].Cells(5, 10) = Ar(5, 10)
  8.     '**************************
  9.     Stop
  10.     Ar(3, 5) = 25
  11.     [A1:J5].Clear
  12.     [A1:J5] = Ar
  13. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 人生沒有所有權,只有生命的使用權。
返回列表 上一主題