我有一个函数可以接受像{variant, variant, variant}
这样的数组作为参数。现在,它也可以接受一系列像A1:A3
这样的单元格作为相同的参数,但无法处理结果。
我认为我需要做的是循环遍历范围,并将每个值添加到数组中,例如:
A1:A3
变为{Value in A1, Value in A2, Value in A3}
A1:B2
变为{A1, A2, B1, B2}
A:A
成为一个只包含A列填充单元格的数组(同样的原则可以应用于上面的两个范围。只有填充的单元格才会添加到数组中)这样,我可以像处理用户在输入参数时自己输入数组一样处理结果。
如果事先不知道范围的大小,我怎么能这样做?我希望用户能够提供我可以转换为数组的任何大小/形状的范围。
对于IsArray()
和{variant, variant, variant}
的输入, A1:A3
都会返回true,因此我会检查它是否为If TypeName(parameter) = "Range" Then
的范围,但之后我无法处理范围,不知道如何将其转换为数组。
我尝试过研究,但我是VBA的新手,我认为我在搜索中使用了错误的术语。感谢任何建议,谢谢!
更新以包含一些代码。请注意,这将是该功能首先要做的事情。后来的代码与问题没有关系,只是后面的代码需要处理一组值。
If IsArray(my_values) Then
'If it's a Range then I need to get the values of each cell and put them into an array.
'If they passed an array like `{1,1,1}`, move on and process the array
If TypeName(my_values) = "Range" Then
Dim rows_count As Long
Dim columns_count As Long
Dim cells_count As Long
'Just testing, not sure if necessary
rows_count = my_values.rows.Count
columns_count = my_values.columns.Count
cells_count = rows_count * columns_count
'Or just cells_count = my_values.Cells.Count
'Need to loop through each cell in the range now and put the values into an array
End If
'Continue processing the array
答案 0 :(得分:1)
考虑:
try_files $uri $uri/ /index.php;
作为一个例子。
当我们在工作表中输入数组时,我们必须确保在行(8)中点亮足够的单元格以容纳8个单元格的输入范围。
这种方法可以适用于处理任何大小或形状的输入范围。
答案 1 :(得分:0)
鉴于你的参数是变量,并且你总是希望函数的输出是一个数组,并且你将有一个输入作为参数,可以是范围,数组常量或非-array常量,以下函数将始终输出一个数组(即使输入是非数组常量)
Option Explicit
Function makeArray(myArray As Variant) As Variant
Select Case IsArray(myArray)
Case True
makeArray = myArray
Case False
makeArray = Array(myArray)
End Select
End Function
对于范围,输出将是2D数组,d1表示行,d2表示列。
否则输出将与输入具有相同的尺寸。 如果输入不是数组,则输出将是具有一维和一个值的数组。