사용자 정의 함수에서 값을 반환하려고하는데 반환되는 값은 모두 0입니다. 나는 변수 wk1과 wk2에 할당하고있는 값이 함수에서 사용되지 않는 것처럼 느낍니다.서브 루틴이 모두 0을 반환합니다.
서브 루틴의 목표는 워크 시트 "가격"에 제공된 가격을 고려하여 주간 수익을 계산하는 것입니다.
나는 VBA 매우 잘 아는 그래서 어떤 도움이 도움을
감사 감사 아니에요!
Public Sub wklyrtn()
Dim wk1, wk2 As Long
Dim row As Long, column As Long
Dim matrix1(2 To 261, 2 To 11) As Integer
Sheets("Prices").Select
Selection.Activate
For row = 2 To 261
For column = 2 To 11
wk2 = Cells(row, column).Value
wk1 = Cells(row + 1, column).Value
matrix1(row, column) = Rtrn(wk1, wk2)
Next column
Next row
Sheets("Returns").Select
Selection.Activate
For row = 2 To 261
For column = 2 To 11
Cells(row, column) = matrix1(row, column)
Next column
Next row
End Sub
Public Function Rtrn(wk1, wk2)
Dim delt As Long
Application.Volatile True
delt = wk2 - wk1
Rtrn = delt/wk1
End Function
아마도 당신의 값이 모두 0으로 잘리지됩니다 'Integer'로'Integer'를'Variant'로 대체하고 s ee는 어떻게됩니까? –
몇 가지 오류가 있습니다. 우선, 'Dim wk1, wk2 As Long'을 선언 할 수 없다면 wk2 만 선언 할 것이므로 'Dim wk1 as long, wk2 as long'을해야합니다. 그러나 이것이 실패 할 이유는 아닙니다. 또한'select'를 사용하지 마십시오. 객체 참조 (워크 시트)를 참조하려면'set'을 사용해야합니다. – Niclas
잘못 설명해 죄송합니다. 나는 코멘트를 삭제하고 올바른 정보를 게시했습니다. John의 제안은 귀하의 코드가 작동하도록합니다. 배열이 일부 유형 (예 : 정수)으로 선언 된 경우이 배열로가는 모든 값은 동일한 유형이어야합니다. Variant로 선언하면 모든 유형의 값이이 배열로 올바르게 전송됩니다. 필요한 경우 Integer로 선언하지 마십시오. Long을 사용하십시오. 32 및 64 비트 시스템에서 정수는 Long으로 변환되므로 성능이 향상되지 않습니다. –