在单元格文本的一部分中查找单词,返回列号:Excel VBA

时间:2017-04-26 08:49:21

标签: excel vba excel-vba

我的目标是在Excel中以用户身份实现搜索功能。

它应该能够在TextBox中输入一个单词并浏览特定行中的每一列并搜索该单词。然后它应该返回首次发现它的列。

使用下面的代码,它只会查看单元格内容的完全匹配。但是,如果单元格值是例如:" Lorem ipsum,dolor sitamet" - 我希望能够搜索" dolor"。

这是我的代码:

Dim rFind As Range     
With Range("D1:D100")
    Set rFind = .Find(What:=TextBox13.Value, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
    If Not rFind Is Nothing Then
        MsgBox rFind.Column
        MsgBox rFind.Row
    End If
End With

4 个答案:

答案 0 :(得分:2)

只需将LookAt:=xlWhole更改为LookAt:=xlPart

即可

文档:Range.Find Method (Excel)

您还可以使用&符号(&)来整理返回的结果,它会连接字符串:

"Col: " & rFind.Column & ", Row: " & rFind.Row
' For example, gives the string "Col: 1, Row: 1" if found in A1

你说你想在"特定行的每一列中搜索"但是你正在查看"特定列中的前100行"?!不确定这是否是一个错字或您的代码是否错误。无论哪种方式,您都可以使用RowsColumns个对象。这些应与完全限定您的范围一起使用,即说出它的位置。

ThisWorkbook.Sheets("Sheet1").Rows(1)      ' Range of entire first row
ThisWorkbook.Sheets("Sheet1").Columns(1)   ' Range of entire first column
ThisWorkbook.Sheets("Sheet1").Columns("A") ' Equivalent, range of entire first column

重写:

Dim rFind As Range     
With ThisWorkbook.Sheets("Sheet1").Columns("D")
    Set rFind = .Find(What:=TextBox13.Value, LookAt:=xlPart, MatchCase:=False, SearchFormat:=False)
    If Not rFind Is Nothing Then
        MsgBox "Col: " & rFind.Column & ", Row: " & rFind.Row
    End If
End With

答案 1 :(得分:0)

部分

LookAt:=xlWhole

应该是

LookAt:=xlPart

答案 2 :(得分:-1)

看起来好像要检查每个单词 - 这样就可以了:

Sub Check()
Dim vWords As Variant
Dim sCheck As String
Dim rFind As Range
Dim i As Long

sCheck = "Lorem ipsum, dolor sitamet" ' TextBox13.Value
sCheck = Replace(sCheck, ",", "")

vWords = Split(sCheck, " ")

For i = 0 To UBound(vWords)
    With Range("D1:D100")
        Set rFind = .Find(What:=Trim(vWords(i)), LookAt:=xlPart, MatchCase:=False, SearchFormat:=False)
        If Not rFind Is Nothing Then
            MsgBox rFind.Column
            MsgBox rFind.Row
        End If
        Set rFind = Nothing
    End With
Next

End Sub

答案 3 :(得分:-2)

代码更新:对于所有评论, 1. xlPart补充道 2.只进行了一次搜索,

现在,如果你能够高举我。

最简单的代码 - 根据您选择的范围 - 范围(" D1:D100和#34;),您只能找到值存在的行号。为了找到列号,请扩展您的范围。

就是这个 -

Sub find_code()
Dim add As String

On Error Resume Next
add = Range("D1:D100").Find(TextBox1.Text, Lookat:=xlPart, MatchCase:=False).AddressLocal

If Err.Number <> 0 Then
MsgBox "Empty Search result", vbInformation
Exit Sub
End If

MsgBox Range(add).Row
MsgBox Range(add).Column

End Sub