听起来像是一个基本问题,但是我找不到任何可以帮助我的提示。
我发现类似Arr = Range("A1:B10")
这样的东西可以使事情变得容易,但是上面示例的问题是,它可能会推入指定范围内的所有值,而这并不是我想要的。虽然随后删除不想要的值听起来像是一个选择,但它听起来也像是很容易避免的无意义的大弯路。
目前,我有以下几点:
For Each cell In Worksheets("Search").Range("C7:C15").Cells
If cell.Value = "Yes" Then fcat() = cell.Offset(0, -1).Value
Next cell
我早些时候做了一个猜测,也尝试了
fcat(cell)
,但是到目前为止,我只在fcat() = cell.Offset(0, -1).Value
上遇到类型不匹配错误,而且我不确定要尝试什么其他方法。谢谢您的宝贵时间,如果您还有其他方法可以改善我的问题,请告诉我。
最佳答案
您将需要在数组变量上使用ReDim statement。
Sub fcat()
Dim fcat As Variant, cell As Range
ReDim fcat(0)
For Each cell In Worksheets("Search").Range("C7:C15").Cells
If cell.Value = "Yes" Then
fcat(UBound(fcat)) = cell.Offset(0, -1).Value
ReDim Preserve fcat(UBound(fcat) + 1)
End If
Next cell
ReDim Preserve fcat(UBound(fcat) - 1)
'try it out
Dim v As Long
Debug.Print LBound(fcat) & ":" & UBound(fcat)
For v = LBound(fcat) To UBound(fcat)
Debug.Print fcat(v)
Next v
End Sub
立即窗口中的结果:
fcat
0:6
13
32
6
20
7
变量不会自动增大或缩小。它的上下边界由LBound function和UBound function表示。您可以使用“保留”选项为阵列分配一个大小并填充它,或使用Redim更改其大小,以维护它已经包含的数据。