Excel VBA - Проверьте ячейку, содержит ли она часть текста - PullRequest
3 голосов
/ 23 февраля 2012

Я хочу проверить диапазон ячеек для определенного фрагмента текста.Этот текст всегда в моем документе, за исключением того, что его ячейка является переменной (столбец всегда 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 ]

7 голосов
/ 23 февраля 2012

Не могли бы вы просто найти подстроку?

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
2 голосов
/ 23 февраля 2012

Это слишком много, чтобы вписаться в комментарий, поэтому публиковать его как ответ ...

Вы должны быть осторожны при использовании Find() только с одним аргументом: если вы ранее использовали Find() в своем коде и (например) указали аргумент lookat:=xlWhole, то вы можете не получить ожидаемых результатов особенно если вы ищете подстроку значения ячейки. Параметры, передаваемые в Find (), являются постоянными: если вы не укажете аргумент, он может быть перенесен из предыдущего использования.

В качестве примера (работа с листом, содержащим текст «здравствуй том» в B4:

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 () "вручную", а затем использовали его в коде позже в том же сеансе (хотя и не тестировали).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...