2016-04-29 5 views
-8

Мне нужно сделать публичную функцию, которая принимает значения из определенного массива и вычисляет функцию f (x) для каждого x, где f (x) = x^3 + 1/5x +2. this is what I am doing but doesnt workКак использовать массивы в функциях VBA?

+4

Пожалуйста, разместить код в линию, а не в виде изображения. Используйте кнопку редактирования для этого. – vacip

+2

Кроме того, что именно вы подразумеваете под «не работает»? Сообщение об ошибке? Неверный результат? – vacip

+0

Это работает для меня. – vacip

ответ

2

Комментарий Jeeped является очень вероятной причиной неправильного функционирования вашего кода, если у вас нет Option Base 1 в верхней части вашего кода. так как у вас есть/место, заявление или изменить ReDim заявления ReDim B(1 To nrows, 1 To ncols) As Double

кроме того вы должны инвертировать Next I и Next j

наконец я хотел бы предложить вам:

  • использования Long переменной типа вместо integer для nrows и i переменных, если вы когда-нибудь имеете дело с datarange с более чем 32767 строками. и предположим, один и тот же тип для ncols и j для простоты

  • использовать «простой» (не массив) двойную переменную для A, поскольку вам нужно только как временный «х» значение для расчета соответствующего «у» значение и магазин это последнее только в массиве B(), которое в конечном итоге будет возвращено вашей функцией.

так что это может быть:

Function functionvalue(datarange) 

Dim nrows As Long, ncols As Long 
Dim i As Long, j As Long 

Dim A As Double, B() As Double 

nrows = datarange.Rows.Count 
ncols = datarange.Columns.Count 

ReDim B(1 To nrows, 1 To ncols) As Double 

For i = 1 To nrows 
    For j = 1 To ncols 
     A = datarange.Cells(i, j) 
     B(i, j) = A^3 + A * 1/5 + 2 
    Next j 
Next i 

functionvalue = B 

End Function 
Смежные вопросы