2016-06-22 9 views
1

Можно ли использовать метод find для поиска резервных опций?Поиск нескольких терминов (отсортировано по приоритету)

Вот мой код прямо сейчас:

Set foundCell = Cells.Find(What:="RCP 1", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ 
      :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
      False, SearchFormat:=False) 
     If Not foundCell Is Nothing Then 
      foundCell.Activate 
      foundCell.Rows("1:1").EntireRow.Select 
      Selection.Copy 
      Range("A" & (PLcount + 8)).Select 
      ActiveSheet.Paste 
     Else 
      Set foundCell = Cells.Find(What:="RCP- 1", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ 
      :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
      False, SearchFormat:=False) 
       If Not foundCell Is Nothing Then 
        foundCell.Activate 
        foundCell.Rows("1:1").EntireRow.Select 
        Selection.Copy 
        Range("A" & (PLcount + 8)).Select 
        ActiveSheet.Paste 
       End If 
     End If 

Я хотел бы быть в состоянии сделать что-то вроде ниже. Обратите внимание на текст после .find (Что: =)

Set foundCell = Cells.Find(What:="RCP 1" "RCP- 1" "RCP 1", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ 
      :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
      False, SearchFormat:=False) 
     If Not foundCell Is Nothing Then 
      foundCell.Activate 
      foundCell.Rows("1:1").EntireRow.Select 
      Selection.Copy 
      Range("A" & (PLcount + 8)).Select 
      ActiveSheet.Paste 
     End If 

Если первый член первого приоритета, второй член является вторым приоритетом, то третий член является третьим приоритетом и т.д.

+0

Просто подумал об этом - есть ли что-нибудь похожее на регулярное выражение на других языках, чтобы я мог использовать «RCP \ s1» в качестве поискового запроса? EDIT: просто просмотрел его и нашел. Тем не менее, мне все еще интересно узнать мой первый вопрос. –

+0

Хм, на самом деле я не могу заставить регулярное выражение работать. Я попробовал «RCP \ s + 1» и «RCP (\ s +) 1» –

+0

. Вы можете сделать с Find, было бы «RCP * 1» –

ответ

3

EDIT - есть только ограниченная поддержка подстановочных знаков в Find() - вы, вероятно, не класс это как «регулярное выражение уровня» функциональность:

* - zero or more characters 
? - single character 
~ - escapes * or ? if you want to find those literal characters 

в качестве альтернативы можно поместить Find в отдельную функцию:

Sub Tester() 

    Dim foundCell, PLCount As Long 

    PLCount = 3 
    Set foundCell = FindFirst(Cells, Array("RCP 1", "RCP- 1")) 

    If Not foundCell Is Nothing Then 
     'no need for any select/activate 
     foundCell.EntireRow.Copy Destination:=Range("A" & (PLCount + 8)) 
    End If 

End Sub 

'return the first match to a value in the array "arrWhat" 
' Returns Nothing if no match 
Function FindFirst(rngWhere, arrWhat) As Range 
    Dim v, f As Range 
    For Each v In arrWhat 
     Set f = rngWhere.Find(what:=v, After:=ActiveCell, LookIn:=xlFormulas, _ 
       LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
       MatchCase:=False, SearchFormat:=False) 
     If Not f Is Nothing Then Exit For 
    Next v 
    Set FindFirst = f 
End Function 
+0

Мне нравится ваш ответ в комментариях! –

+0

Не забудьте проверить зеленый знак, чтобы принять ответ! – Sgdva

Смежные вопросы