【问题标题】:Range.Find fails on ranges that are both hidden AND part of a filterRange.Find 在既是隐藏又是过滤器一部分的范围上失败
【发布时间】:2015-06-15 13:08:17
【问题描述】:

我在 Excel 2003 中遇到了一个特殊问题,在该问题中 Range.Find 方法在搜索既隐藏又属于过滤范围的单元格中的值时失败。

要清楚,这是有问题的方法调用:

Cells.Find(SearchString, LookIn:=xlFormulas, LookAt:=xlWhole)
  • 如果包含 SearchString 的单元格只是被隐藏,Range.Find 可以工作。
  • 如果包含 SearchString 的单元格只是过滤范围的一部分(但未隐藏),则 Range.Find 有效。
  • 如果包含 SearchString 的单元格都被隐藏(通过过滤器或其他方式),并且是过滤范围的一部分,则 Range.Find 失败。

各种 Excel 网站和论坛上的许多消息来源声称,指定“LookIn:=xlFormulas”将强制 Range.Find 在隐藏单元格中进行搜索。虽然荒谬,但如果 SearchString 位于 隐藏的单元格中,这似乎是正确的。如果单元格被隐藏并且是过滤范围的一部分,则会失败。

请注意,单元格是否被过滤器隐藏并不重要。例如,您可以搜索过滤范围的标题(过滤器本身永远不会隐藏该标题),但如果该标题恰好位于您隐藏的列中,Range.Find会失败。

是否有任何 Excel 方法可以可靠地搜索单元格,而不考虑它们是否恰好被隐藏和/或过滤器的一部分?

【问题讨论】:

  • 我认为您无法解决它(如果不更改 AutoFilter 的本机行为,这是不可能的;我们不能)。否则,当您从那里复制/粘贴时,您还将复制未使用当前过滤器包含的条目。对于 excel,这些条目暂时是“未知的”(这是过滤器的目的)。您是否可以暂时删除过滤器并在完成所有搜索后恢复它? this post 有很多有用的答案来实现这一目标。也许您可以使用这种方法。

标签: vba excel


【解决方案1】:

更多细节会有所帮助

  • 对于一维范围,您可以使用Match
  • 对于 2D 变量数组,要么查看数组的每个元素,要么将 MATCH 应用于数组的每一列

以下示例 一维

Sub D1()

Dim rng1 As Range
Dim rng2 As Range
Set rng1 = Range("C5:C100")
Dim StrTest As String
Dim X As Variant

StrTest = "Filtered"

X = Application.Match(StrTest, rng1, 0)
If IsError(X) Then
    MsgBox "no match"
Else
    MsgBox "Found in position " & X
    Set rng2 = rng1.Cells(X)
End If
End Sub

Sub D2()

二维

Dim X
Dim lngRow As Long
Dim lngCol As Long
Dim StrTest As String


X = Range("C5:D100").Value2
StrTest = "Filtered"

For lngRow = 1 To UBound(X, 1)
    For lngCol = 1 To UBound(X, 2)
        If X(lngRow, lngCol) = StrTest Then
         Set rng1 = [c5].Offset(lngRow - 1, lngCol - 1)
         MsgBox "Found in position " & rng1.Address
        End If
    Next
Next

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多