【问题标题】:Use FindNext on a Range of Variable Length in Excel VBA在 Excel VBA 中对可变长度范围使用 FindNext
【发布时间】:2016-06-24 23:07:42
【问题描述】:

我非常接近 excel VBA,并且正在尝试使用 FindNext 函数在以下数据集的列中查找下一个非零值。

当我第一次尝试这样做时,我使用 Columns 函数说:Columns("J").FindNext().Row 但返回的值是 3 而不是 11。然后我尝试使用范围对象,将其声明为 @ 987654323@ 其中 H 列的数据直到 J 列的长度。这样做会返回错误“编译错误:参数数量错误或属性分配无效”我不完全确定为什么 1)编译器不接受我如何声明范围以及 2) 为什么 FindNext 函数没有返回下一个非零值所在的行。提前谢谢你。

【问题讨论】:

  • 你有太多) 所以:Range("J2", Cells(Cells(Rows.Count, "H").End(xlUp).Row, "J"))
  • 你为什么不直接使用.Range("J2").End(xlDown).Row?
  • 列是否包含常量或公式??
  • @ScottCraner 谢谢你,所以现在错误消失了,但它仍然返回值 3
  • @Gary'sStudent 不,它的所有值都是固定值,或者根本没有值

标签: excel range vba


【解决方案1】:

您不需要 Find() 或 FindNext() 来定位包含非空的行:

Sub FindingAnything()
    Dim rng As Range
    Dim s As String

    Set rng = Range("J:J").Cells.SpecialCells(xlCellTypeConstants)

    For Each r In rng
        s = s & r.Row & vbCrLf
    Next r

    MsgBox s
End Sub

如果该列包含一些带有公式的单元格,您将更改 SpecialCells() 参数。如果该列中填充了公式,其中一些返回非 Null,那么您将遇到一个有趣的问题!

【讨论】:

  • 如果是这种情况,只需将整个列的值加载到一个数组中并循环遍历。刚刚测试了一下,不到 1 秒。
  • @ScottCraner 但是你怎么能做同样的事情,但一次一个,所以返回的值只是 3 而不是所有的值
  • @vman 您将使用标准 for 循环遍历数组,并且每次数组对象不为空时,您都会使用 for 计数器作为行号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多