Я строю UDF, используя C # и Excel-DNA. Тем не менее, я попал в кирпичную стену, когда пытался зациклить, хотя диапазон ячеек, который является одним из параметров UDF. Моей первой попыткой было преобразовать этот диапазон ячеек в массив в C #, но я не знаю, как это сделать с помощью Excel-DNA. Я использую следующий код VBA для создания своего кода на C #.
Function my_UDF(stk, F)
Dim i As Integer
z = stk
k = 0
i = 1
sum_if = 0
count_if = 0
Do Until i = 30
'If F(i) > 0 Then
If z >= F(i) Then
z = z - F(i)
If F(i) > 0 Then
k = k + 1
sum_if = sum_if + F(i)
count_if = count_if + 1
End If
Else
k = k + (z / F(i))
z = 0
End If
i = i + 1
Loop
If z > 0 Then k = k + (z / (sum_if / count_if))
my_UDF = k
End Function
В C # я пытаюсь добавить что-то вроде этого:
using ExcelDna.Integration;
namespace my_project
{
public class my_UDF_class
{
[ExcelFunction(Name = "my_UDF_function")]
public static double my_UDF_function(double stk, double f)
{
// transform range of cells into array?
int i = 1;
double c = 0;
double sum_f = 0;
double count_f = 0;
while (i > 30)
{
if (stk >= f(i))
{
stk = stk - f(i);
if (f(i) > 0)
{
c = c + 1;
sum_f = sum_f + f(i);
count_f = count_f + 1;
}
}
else
{
c = c + (stk / f(i));
stk = 0;
}
i++;
}
if (stk > 0)
{
c = c + (stk / (sum_f / count_f));
}
return c;
}
}
}
Perharps, если есть способ проходить по ячейкам напрямую, мне даже не нужен массив.