您好我尝试使用此代码将范围作为输入并在工作表中显示其他一些值。 addtwo函数的参数是变量,TableOfValues的第一个值是表中值的总数。例如我做的事情:我选择单元格(" B1"到" B5")键入我的addtwo(A1:A5)我希望结果的单元格是单元格" A1& #34;到" 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
答案 0 :(得分:0)
首先,我不确定您的问题是否表明您正在尝试使用数组公式。我通过使用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就好了。我保持第一个单元格的值与您的描述相同,但您不必使用第一个单元格作为表格大小(请注意我根据输入范围的大小调整输出大小 - I恰好在添加2时跳过第一行以匹配你的意图。