Здраствуйте! Прошу помочь решить такую задачку на выделение цветом слов внутри ячеек после поиска и отсутсвия таких слов в ячейках в столбце напротив. В ячейке А1 - Ф И О(может быть Ф И О Ф И О) В ячейке B1 - много текста, который содержит Ф И О(или текст и Ф И О Ф И О) Если каждое слово из А1 есть в В1 - цветом не выделять, нет какого нибудь слова в В1 - отметить в А1 или "Ф" или "И" или "О" красным. Пример результата: А1: "Иванков Иван Иванович" B1: "Текст Иванов Иван Иванович текст" А2: "Иванов Иван Петрович" B2: "Текст Иванов Иван Иванович текст"
Здраствуйте! Прошу помочь решить такую задачку на выделение цветом слов внутри ячеек после поиска и отсутсвия таких слов в ячейках в столбце напротив. В ячейке А1 - Ф И О(может быть Ф И О Ф И О) В ячейке B1 - много текста, который содержит Ф И О(или текст и Ф И О Ф И О) Если каждое слово из А1 есть в В1 - цветом не выделять, нет какого нибудь слова в В1 - отметить в А1 или "Ф" или "И" или "О" красным. Пример результата: А1: "Иванков Иван Иванович" B1: "Текст Иванов Иван Иванович текст" А2: "Иванов Иван Петрович" B2: "Текст Иванов Иван Иванович текст"Ikurudzz
Sub xu_18() Application.ScreenUpdating = False 'нижняя* ячейка столбца A a = Cells(Rows.Count, "a").End(xlUp).Row 'установим цвет шрифта = Авто Range("a1:a" & a).Font.ColorIndex = xlAutomatic 'пройдемся циклом по ячейкам столбца A For b = 1 To a m = Range("a" & b).Value 'значение очередной ячейки n = Replace(m, Chr(160), " ") 'заменяем* неразрывные пробелы обычными c = n & " " 'добавляем пробел в конец текста d = Len(c) 'кол-во символов с пробелом в ячейке* e = Replace(c, " ", "") 'удалим* пробелы f = Len(e) 'кол-во символов без пробелов g = d - f 'кол-во пробелов = кол-во слов q = Range("b" & b).Value 'значение ячейки столбца B r = Replace(q, Chr(160), " ") 'заменяем* неразрывные пробелы обычными o = " " & r & " " 'добавим пробелы 'пройдемся циклом по словам очередной ячейки i = 1 'начало слова For h = 1 To g l = Mid(c, i, d) 'текст без предыдущего слова j = InStr(l, " ") 'ищем очередной пробел k = " " & Mid(c, i, j) 'извлекаем* слово с пробелами p = InStr(o, k) 'ищем слово 'если слово не найдено, выделяем If p = 0 Then Range("a" & b).Characters(Start:=i, Length:=j - 1).Font.Color = vbRed End If i = i + j 'начало очередного слова Next Next Application.ScreenUpdating = True End Sub
[/vba]
[vba]
Код
Sub xu_18() Application.ScreenUpdating = False 'нижняя* ячейка столбца A a = Cells(Rows.Count, "a").End(xlUp).Row 'установим цвет шрифта = Авто Range("a1:a" & a).Font.ColorIndex = xlAutomatic 'пройдемся циклом по ячейкам столбца A For b = 1 To a m = Range("a" & b).Value 'значение очередной ячейки n = Replace(m, Chr(160), " ") 'заменяем* неразрывные пробелы обычными c = n & " " 'добавляем пробел в конец текста d = Len(c) 'кол-во символов с пробелом в ячейке* e = Replace(c, " ", "") 'удалим* пробелы f = Len(e) 'кол-во символов без пробелов g = d - f 'кол-во пробелов = кол-во слов q = Range("b" & b).Value 'значение ячейки столбца B r = Replace(q, Chr(160), " ") 'заменяем* неразрывные пробелы обычными o = " " & r & " " 'добавим пробелы 'пройдемся циклом по словам очередной ячейки i = 1 'начало слова For h = 1 To g l = Mid(c, i, d) 'текст без предыдущего слова j = InStr(l, " ") 'ищем очередной пробел k = " " & Mid(c, i, j) 'извлекаем* слово с пробелами p = InStr(o, k) 'ищем слово 'если слово не найдено, выделяем If p = 0 Then Range("a" & b).Characters(Start:=i, Length:=j - 1).Font.Color = vbRed End If i = i + j 'начало очередного слова Next Next Application.ScreenUpdating = True End Sub
Nic70y, спасибо!! (не думал что настолько сложное решение(для меня). А он справится с несколькими тыс значений в столбцах А, В(как далеко вниз таблицы заглядывает)?
Nic70y, спасибо!! (не думал что настолько сложное решение(для меня). А он справится с несколькими тыс значений в столбцах А, В(как далеко вниз таблицы заглядывает)?Ikurudzz
на данном примере с 5000 строк справился мгновенно. справиться в любом случае, если тексты слишком длинные и т.п. ну может долго считать будет. так Вы проверьте
на данном примере с 5000 строк справился мгновенно. справиться в любом случае, если тексты слишком длинные и т.п. ну может долго считать будет. так Вы проверьтеNic70y