2017-09-15 111 views
0

我想创建一个功能MyRange如下:范围在Excel中使用VBA

输入:三个数的a,b,d
输出:值从阵列以与步骤大小B d。

例如,如果A1包含1,和B1含有5,和你写= MyRange(A1,B1,1)在小区C1(和你按下Ctrl + Shift + Enter键)你得到:

A | B | C | D | E | F | G 
------------------------- 
1 | 5 | 1 | 2 | 3 | 4 | 5 

这里是我的审判:

Function MyRange(a, b, d) 
Dim Index As Integer, Number As Integer 
Dim Res() As Integer 
Index = 0 
For Number = a To b Step d 
    Res(Index) = Number 
    Index = Index + 1 
Next Number 
MyRange = Res 
End Function 

当我尝试这一点,Excel中抛出#VALUE!我不知道有什么问题..

BTW,是的,我有一个类似的问题,在此之前,没有得到答案,因为它太复杂了,所以我会删除它,在这里简化我的问题。

+0

这不是完整的答案,但有一点你需要做的就是你的输出选择'C1:C [B + 2]'和输入数组公式与所有这些列强调让你的输出。 –

+0

你是否将它作为数组公式输入?你也没有声明Res的大小,所以需要使用Redim。 – SJR

+0

@ScottHoltzman TNX,但即使我这样做时,Excel会引发同样的错误 –

回答

1

清理该位为我工作。主要是,我添加了ReDim Preserve来为阵列添加维度。

Function MyRange(a As Integer, b As Integer, d As Integer) As Integer() 

    Dim Index As Integer, Number As Integer 
    Dim Res() As Integer 

    Index = 0 

    For Number = a To b Step d 

     ReDim Preserve Res(Index) 
     Res(Index) = Number 
     Index = Index + 1 

    Next Number 

    MyRange = Res 

End Function 

您将遇到的问题是有多少列从C中选择以输入您的公式。这将取决于d/b

+0

我怎么能概括它来处理其中a,b,d是整数(的情况下),而不仅仅是整数? –

+0

@DudiFrid - 如果你想数组的传递到参数写'(A()为整数,b()作为整数...)' –