2015-01-25 3 views
-3

Я пытаюсь выяснить, как искать точное совпадение строк в ячейке в excel с помощью vba. Например, я хочу найти «the» в «Существует магазин», и он найдет только «the», а не «There», так как он также имеет. Я пытаюсь выполнить автоматический поиск/замену, и я продолжаю работать в этой проблеме, где он также заменяет часть «The». Я изучил использование Instr, но это не помогло. Данные, которые я ищу, находятся в ячейке A1 только. Я просмотрел .find, но похоже, что он работает только с параметром Column. Я что-то упускаю? Кроме того, все мое местоположение ячейки определяется динамически, поэтому я не могу жестко закодировать адрес. Любая помощь будет оцененаКак искать точную строку в ячейке в excel?

Спасибо,

+2

Покажите нам, что вы уже пробовали. Смутное описание действительно не будет сделано. –

ответ

-1

Самый простой способ сделать всю замену слов в Excel будет пе с использованием регулярных выражений

Вот простой отправной точкой. Передайте ему диапазон, поиск слова и заменяющее слово. Вы должны добавить обработку ошибок и т. Д. В соответствии с вашими потребностями.

Sub ReplaceInRange(_ 
    r As Range, _ 
    FindWord As String, _ 
    Optional ReplaceWord As String = vbNullString) 
    Dim re As RegExp 
    Dim mtchs As MatchCollection 
    Dim mtch As Match 

    Dim dat As Variant 
    Dim rw As Long, col As Long 

    ' Get Data from range 
    If r.Count = 1 Then 
     ReDim dat(1 To 1, 1 To 1) 
     dat(1, 1) = r.Value 
    Else 
     dat = r.Value 
    End If 


    ' Set up Regex 
    Set re = New RegExp 
    re.IgnoreCase = True 
    re.MultiLine = True 
    re.Global = True 
    re.Pattern = "\b" & FindWord & "\b" 

    'process the data 
    For col = 1 To UBound(dat, 2) 
    For rw = 1 To UBound(dat, 1) 
     If re.test(dat(rw, col)) Then 
      dat(rw, col) = re.Replace(dat(rw, col), ReplaceWord) 

      'Optional, remove double spaces 
      dat(rw, col) = Application.WorksheetFunction.Trim(dat(rw, col)) 
     End If 
    Next rw, col 

    ' Return data to range 
    r = dat 
End Sub 

вызовов, как это

Sub Demo() 
    Dim rng As Range 

    ' Get range to process by any means you choose 
    Set rng = [A1:A2] 

    ' Replace 'the' with blank 
    ReplaceInRange rng, "the" 
End Sub 
+0

Спасибо, Крис !. Это действительно помогло. Однако я закончил использование следующего .. Instr (ThisWorkbook.Worksheets (SheetName) .Cells (i, j), "the")> 0 Я просто воспользовался тем, что после него будет пробел. Это быстрое решение, но я собираюсь посмотреть на внедрение RegExp в качестве более постоянного решения. – user4491325

+0

Рад, что это помогло. Просто помните, что за вашим поисковым термином может следовать пробел _or_, или могут быть последние несколько букв большего слова. –

+0

Да, именно поэтому я собираюсь реализовать RegExp – user4491325