Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 对于范围中的每个单元格,若满足条件,则将单元格值添加到数组中_Arrays_Vba_Excel_Foreach - Fatal编程技术网

Arrays 对于范围中的每个单元格,若满足条件,则将单元格值添加到数组中

Arrays 对于范围中的每个单元格,若满足条件,则将单元格值添加到数组中,arrays,vba,excel,foreach,Arrays,Vba,Excel,Foreach,这听起来像是一个基本的问题,但我还没有找到任何可以帮助我的提示 我发现了类似Arr=RangeA1:B10的东西,这会使事情变得简单,但上面的例子的问题是,它可能会将指定范围内的所有值推入,而我不希望它这样做。虽然事后删除不需要的值听起来像是一种选择,但它也像是一个可以轻松避免的大而无意义的迂回 目前我有以下几点: For Each cell In Worksheets("Search").Range("C7:C15").Cells If cell.Value = "Yes" Then

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

我发现了类似Arr=RangeA1:B10的东西,这会使事情变得简单,但上面的例子的问题是,它可能会将指定范围内的所有值推入,而我不希望它这样做。虽然事后删除不需要的值听起来像是一种选择,但它也像是一个可以轻松避免的大而无意义的迂回

目前我有以下几点:

For Each cell In Worksheets("Search").Range("C7:C15").Cells
    If cell.Value = "Yes" Then fcat() = cell.Offset(0, -1).Value
Next cell
我之前猜了一下,也尝试了fcatcell,但到目前为止,我只在fcat=cell.Offset0,-1.Value上得到了类型不匹配错误,我不完全确定还需要尝试什么


谢谢您抽出时间,如果还有什么可以改进我的问题,请告诉我。

我认为这应该可以解决您的问题

Dim i as integer

i = 0
For Each cell In Worksheets("Search").Range("C7:C15").Cells
    If cell.Value = "Yes" Then 
      fcat(i) = cell.Offset(0, -1).Value
      i = i +1
    end if
Next cell

在excel中使用标准函数怎么样? 像苏米夫

使用SUMIF函数对满足指定条件的范围内的值求和。例如,假设在包含数字的列中,您只希望对大于5的值求和。可以使用以下公式:

=SUMIFB2:B25,>5

在此示例中,标准将应用于要求和的值。如果需要,可以将条件应用于一个范围,并将不同范围内的相应值相加。例如,公式=SUMIFB2:B5,John,C2:C5仅对C2:C5范围内的值求和,其中B2:B5范围内的对应单元格等于John。

您需要对数组变量使用

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 

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

您必须使用IndexNumber来寻址位置。这就是为什么我自己没有想到这样一个简单的解决方案的原因。感谢您的快速回复!虽然现在我在说“下标超出范围”时遇到了一个错误,所以我想我接下来会研究这个问题。请检查@jepeed的答案