Excel VBA - 检查单元格是否包含文本

时间:2012-02-23 16:13:07

标签: vba excel-vba excel

我想查看某段文字的一系列单元格。这个文本总是在我的文档中,除了它的单元格是可变的(列始终是B)。因此,我检查从1:75开始的范围是否有任何单元格包含一段文本,但它似乎不起作用。

Dim FoundRange As Range
Set FoundRange = Cells.Find("5/7 binnen 4h")
Range("I" & EmptyCell + 2).Value = ... (value of cell I on same row as B)

我正在寻找的单元格总是包含这个文本Onderhoud 5/7 binnen 4h,但它的位置可能会有所不同,这就是为什么我只需要检查它是否包含任何一个。当我找到那个单元格时,我需要在同一行上的值I.

欢迎任何建议!

2 个答案:

答案 0 :(得分:6)

你能不能只搜索子字符串?

Sheet1.Cells.Find("string to find")

将返回包含字符串的范围(如果找不到字符串,则返回任何内容。

例如

Public Sub Macro1()
Dim FoundRange As Range

Set FoundRange = Sheet1.Cells.Find("5/7 binnen 4h")

' display the cell address to the user
MsgBox FoundRange.Address


' put the found value in column i in the same row as the found text in a known location ($C$1 in this case)
Sheet1.Range("$C$1").Value = Sheet1.Cells(FoundRange.Row, 9).Value

' put the found value in four columns to the right in the same row as the found text in a known location ($C$1 in this case)
Sheet1.Range("$C$2").Value = FoundRange.Offset(0, 4).Value

End Sub

答案 1 :(得分:2)

这太过于不适合评论,所以将其作为答案张贴......

使用Find()只需一个参数时应该小心:如果您之前在代码中使用了Find()并且(例如)指定了参数lookat:=xlWhole那么您可能不会获得您期望的结果,特别是如果您正在寻找单元格值的子字符串。传递给Find()的设置是持久的:如果您没有指定参数,那么它可能会从之前的使用中继承。

作为一个例子(使用包含B4中文本“hello tom”的工作表:

Sub Tester()

    Dim f

    Set f = ActiveSheet.Cells.Find(what:="tom", lookat:=xlPart)
    Report f

    Set f = ActiveSheet.Cells.Find(what:="tom", lookat:=xlWhole)
    Report f

    Set f = ActiveSheet.Cells.Find("tom")
    Report f

End Sub

Sub Report(f)
    If Not f Is Nothing Then
        Debug.Print f.Address
    Else
        Debug.Print "not found"
    End If
End Sub

运行此命令:

$B$4
not found
not found

我似乎记得如果您已经“手动”使用Find()然后在同一会话中稍后在代码中使用它(尽管没有测试),情况也是如此。