Я хотел бы найти подстроку, которая заканчивается после определенной фразы в коллекции (перечисленной в столбце Excel) других строк.
Итак, скажем, я хочу найти строку «BLUE MOON» в других строках, и я хочу определить, что подстрока заканчивается после «N» в «BLUE MOON», чтобы избежать результата TRUE в случае, например. "ГОЛУБОЙ ЛУННЫЙ СВЕТ". Другими словами, мне нужен поиск по любым частям слова, но только слева. Справа должна быть фиксированная граница, то есть ноль дополнительных символов. С другой стороны, мне нужны положительные результаты, если начало отличается, например, «ТЕМНАЯ СИНЯЯ ЛУНА» должна привести к ИСТИННОМУ результату. Поэтому полное равноправие невозможно.
Я хотел бы использовать Find
, но считаю, что это невозможно. Find
, похоже, не принимает никаких подстановочных знаков, кроме *
.
Вот несколько слов для проверки:
Ожидается положительный результат поиска:
BLUE MOON DARK BLUE MOON LIGHT BLUE MOON
Ожидается отрицательный результат поиска::
BLUE MOONLIGHT LAST BLUE MOONSHINE BLUE MOONDANCE
Любые подсказки также приветствуются. Прямо сейчас я использую следующую функцию для удаления слов (работает нормально, за исключением того, что она также удаляет ранее упомянутые случаи с отрицательным ожидаемым результатом поиска):
Sub testingXXX()
Dim ws As Worksheet
Set ws = ActiveWorkbook.ActiveSheet
Dim aCell As Range, bCell As Range, aSave As String, y As Long
MyAr = Split("*BLUE MOON", ",")
For y = LBound(MyAr) To UBound(MyAr)
With ws
Set aCell = .Columns(1).Find(what:=MyAr(y), LookIn:=xlValues, _
lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not aCell Is Nothing Then
aSave = aCell.Address
Do
If bCell Is Nothing Then
Set bCell = .Range("A" & aCell.row)
Else
Set bCell = Union(bCell, .Range("A" & aCell.row))
End If
Set aCell = .Columns(1).FindNext(after:=aCell)
Loop Until aCell.Address = aSave
End If
Set aCell = Nothing
End With
Next y
If Not bCell Is Nothing Then bCell.EntireRow.Delete
End Sub