【问题标题】:For each cell in range, add cell value to array-- IF condition is met对于范围内的每个单元格,将单元格值添加到数组中——如果满足条件
【发布时间】:2015-08-25 11:00:08
【问题描述】:

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

我找到了像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 上遇到类型不匹配错误,我不完全确定要尝试什么。

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

【问题讨论】:

  • 您必须使用索引号来确定位置。

标签: arrays vba excel foreach


【解决方案1】:

您需要在数组变量上使用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 functionUBound function 表示。您可以为数组分配一个大小并填充它,或者使用 Redim 使用 Preserve 选项更改大小以维护它已经包含的数据。

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

    • 这就是我自己没有想到这么简单的解决方案而自责的地方。感谢你的快速回复!虽然现在我收到一个错误,提示“下标超出范围”,所以我想我接下来会调查。
    • 还要检查@jepeed的答案
    【解决方案3】:

    在 excel 中使用标准函数怎么样? 喜欢 sumif

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

    =SUMIF(B2:B25,">5")

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      • 2013-04-10
      • 2021-12-05
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多