2016-06-20 2 views
1

Я пытаюсь сделать код для документа первенствовать, который позволит мне выполнить следующие действия:Выделите слова в ячейке (а не в ячейке), сопоставляя только ВСЕ СЛОВА?

  • Выберите лист для указанного набора слов (как определено диспетчером имен)
  • Поиск для перечисленные слова как целые слова, с учетом чувствительности к регистру, слова, которым предшествуют/сопровождаются пунктуация и т. д.
  • Отформатируйте перечисленные слова в своих ячейках (а не самой ячейке) на новый цвет шрифта (в идеале I хотелось бы, чтобы он был выделен, но я не уверен, что Excel позволяет это).

В настоящее время у меня есть код, указанный ниже, который выделяет желтую ячейку и превращает указанные слова в красный цвет, но это соответствует вхождению в слова. Как я могу заставить его соответствовать целым словам?

Sub ColorCertainWords() 
     Dim Z As Long, Position As Long, Words As Variant, Cell As Range 
     Words = Range("LIST") 'LIST defined by name manager as list of words that cannot be used 
     For Each Cell In Sheets("Sheet1").Range("A1:AA6000") 'Range of cells to be checked 
     If Len(Cell.Value) Then 
      For Z = 1 To UBound(Words) 
       Position = InStr(1, Cell.Value, Words(Z, 1), vbTextCompare) 
       Do While Position 
       Cell.Characters(Position, Len(Words(Z, 1))).Font.ColorIndex = 3 'Red 
       Cell.Interior.ColorIndex = 6 ' Yellow 
       Position = InStr(Position + 1, Cell.Value, Words(Z, 1), vbTextCompare) 
       Loop 
      Next 
     End If 
     Next 
     End Sub 
+1

Очевидно, что «Позиция» обозначает начальную точку найденного вхождения, а 'Len (Words (Z, 1))' обозначает длину. Таким образом, вам нужно только убедиться, что символ перед 'Position' и после' Postion + Len (Words (Z, 1)) '- это' (пробел) '. Короче говоря, реализуя предложение 'If', которое проверяет, вы можете убедиться, что только полные вхождения отмечены красным. – Ralph

+0

Не будет ли причиной проблемы, если слово находится в начале предложения, в конце предложения и т. Д.? Например, если я ищу слово «собака», а предложение в ячейке «Вы видели мою собаку?». У этого экземпляра есть собака, за которой следует «?» а не (пробел), что создаст проблемы? – Michael

+1

Затем вам нужно будет установить другие проверки для пунктуации и, если это первое слово или последнее слово. –

ответ

0

Вот ваш модифицированный код, который поможет вам продолжать работу.

Sub ColorCertainWords() 
    Dim Z As Long, Position As Long, Words As Variant 
    Dim Cell As Range, x As Integer, j As Integer 
    Dim tempWords As Variant 

    Words = Range("LIST") 
    x = 1 
    For Each Cell In Sheets("Sheet6").Range("A1:A6") 'Range of cells to be checked 
     If Len(Cell.Value) Then 
      tempWords = Split(Cell.Value, " ") 'Splitting cell value by space 
      For i = LBound(tempWords) To UBound(tempWords) 'Looping through splitted values 
       j = InStr(x, Cell.Value, " ") + 1 
       For Z = 1 To UBound(Words) 
        If tempWords(i) = Words(Z, 1) Then 'Checking is words are matching 
         For k = 1 To Len(tempWords(i)) 
          Cell.Characters(x, Len(tempWords(i))).Font.ColorIndex = 3 'Red 
          Cell.Interior.ColorIndex = 6 ' Yellow 
         Next 
        End If 
       Next 
       x = j 
      Next 
      x = 1 
     End If 
    Next 
End Sub 

А вот тестовые данные с результатом формат, который я использовал:

enter image description here

Позвольте мне знать, если это поможет.

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