Бих искал да търся подниз, който завършва след определена фраза в колекция (посочена в колона на Excel) от други низове.
Да кажем, че искам да търся низа „BLUE MOON“ в други низове и искам да определя, че поднизът завършва след „N“ на „BLUE MOON“, за да избегна резултата TRUE в случай на напр. "СИНЯ ЛУННА СВЕТЛИНА". С други думи, това, от което се нуждая, е търсене на всякакви части от дума, но само отляво. Отдясно трябва да има фиксирана рамка, тоест нула допълнителни знаци. От друга страна, имам нужда от положителни резултати, ако началото е различно, например "DARK 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