听起来像是一个基本问题,但是我找不到任何可以帮助我的提示。

我发现类似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


arrays - 对于范围内的每个单元格,如果满足条件,则将单元格值添加到数组-LMLPHP

立即窗口中的结果:

fcat
0:6
 13
 32
 6
 20
 7


变量不会自动增大或缩小。它的上下边界由LBound functionUBound function表示。您可以使用“保留”选项为阵列分配一个大小并填充它,或使用Redim更改其大小,以维护它已经包含的数据。

09-30 16:52