您好我正在尝试此代码将范围作为输入并在工作表中显示一些其他值。 addtwo函数的参数是变量,TableOfValues的第一个值是表中值的总数。例如我做的:我选择单元格(“B1”到“B5”)键入我的addtwo(A1:A5)我希望结果的单元格是单元格“A1”到“A5”,在单元格“A1”中有5个(表格中有5个单元格)我尝试使用ctrl + shift在单元格中显示它们(“B1”到“B5”)
Function addtwo(ParamArray TableOfValues() As Variant) As Variant
Dim UResult() As Double
'table that would be passed to addtwo
ReDim UResult(TableOfValues(0)) As Double
'TableOfValues(0) contains the length of the table
UResult(0) = TableOfValues(0)
For i = 1 To 2 * TableOfValues(0)
UResult(i) = TableOfValues(i) + 2
Next
addtwo = UResult
End Function
首先,我不确定您的问题是否清楚表明您正在尝试使用数组公式。我通过使用Ctrl-Shift来收集它。但读这篇文章的人可能没有意识到这一点(我可能错了,在这种情况下我的回答是行不通的)。
这假设公式是数组公式={addtwo(vertical_range)}
。
试试这个:
Function addtwo(TableOfValues As Range) As Variant
Dim UResult() As Double
ReDim UResult(1 To TableOfValues.Rows.Count, 1 To 1) As Double
UResult(1, 1) = TableOfValues.Cells(1)
For i = 2 To TableOfValues.Rows.Count
UResult(i, 1) = TableOfValues.Rows(i).Cells(1).value + 2
Next
addtwo = UResult
End Function
与您的代码的差异:
Range
对象而不是ParamArray。我认为你所做的是可能的,但是没有必要打开那个ParamArray就更好了。虽然你不必使用第一个单元格作为表格大小(我注意到我根据输入范围的大小调整输出大小 - 我碰巧跳过了添加2以匹配您的意图时的第一行)。