Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2012, 13:51   #1
Azz100
Пользователь
 
Регистрация: 16.12.2009
Сообщений: 34
По умолчанию Сложный поиск с выделением

Здраствуйте.
В столбце, предположим в A1:A6, есть текстовые данные вида:
100 500 300
200 50 765
13 12 90
123 9000
100500
222 77

Если слов больше одного, то они всегда разделены пробелами.

В соседнем столбце, предположим в B1:B6, есть аналогичные:
301 200 201
666 200
91 92 93
9000 123
10909
77777 7777

Если слов больше одного, то они всегда разделены пробелами.

Что нужно.
Взять первое слово из ячейки А1 (первое до пробела!) и сравнить его с ячейкой В1.
Если слово не найдено, то берем следующее слово из ячейки А1, которое стоит после пробела (и до следующего пробела!), и опять таки сравниваем его с ячейкой В1.
Если слово опять таки не найдено, то переходим к ячейке ячейке А2 и сравниваем с В2. И т.д.
Если нашлось хоть одно слово, то выделяем эту ячейку заливкой.

Так, в приведеном примере, залиты должны быть ячейки А2 и А4 (ну или В2 и В4).

Важное уточнение! При поиске регистр должен игнорироваться.
Azz100 вне форума Ответить с цитированием
Старый 17.08.2012, 14:37   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
=ЕСЛИ(И(ЕЧИСЛО( НАЙТИ(" ";$A1;1));ЕЧИСЛО( НАЙТИ(" ";$B1;1)));
                    ЕСЛИ(ЛЕВСИМВ($A1;НАЙТИ(" ";$A1;1) - 1) = ЛЕВСИМВ($B1;НАЙТИ(" ";$B1;1) - 1);ИСТИНА;
                    ЕСЛИ(И(ЕЧИСЛО( НАЙТИ(" ";$A1;НАЙТИ(" ";$A1;1) +1));ЕЧИСЛО( НАЙТИ(" ";$B1; НАЙТИ(" ";$B1;1) +1)));
                    ЕСЛИ(ПСТР($A1; НАЙТИ(" ";$A1;1) + 1; НАЙТИ(" ";$A1; НАЙТИ(" ";$A1;1) + 1)- НАЙТИ(" ";$A1;1) - 1) 
                    = ПСТР($B1; НАЙТИ(" ";$B1;1)+1;НАЙТИ(" ";$B1; НАЙТИ(" ";$B1;1) +1 ) - НАЙТИ(" ";$B1;1) - 1);
                    ИСТИНА;ЛОЖЬ);ЛОЖЬ));ЛОЖЬ)
примерно как-то так будет работать, если в УФ формулу подставить

хотя намного правильнее было бы разделить по столбцам данные и сравнение там будет намного проще.
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 17.08.2012 в 14:44.
DiemonStar вне форума Ответить с цитированием
Старый 17.08.2012, 15:08   #3
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
  =ИЛИ(
    ЕСЛИОШИБКА(ЛЕВСИМВ($A1;НАЙТИ(" ";$A1;1)-1); $A1) = 
    ЕСЛИОШИБКА(ЛЕВСИМВ($B1;НАЙТИ(" ";$B1;1)-1); $B1); 
    ЕСЛИОШИБКА(ПСТР($A1;НАЙТИ(" ";$A1;1)+1;НАЙТИ(" ";$A1;НАЙТИ(" ";$A1;1)+1)-НАЙТИ(" ";$A1;1)-1); 
      ЕСЛИОШИБКА(ПРАВСИМВ($A1;ДЛСТР($A1) - НАЙТИ(" ";$A1;1)); $A1)) =
    ЕСЛИОШИБКА(ПСТР($B1;НАЙТИ(" ";$B1;1)+1;НАЙТИ(" ";$B1;НАЙТИ(" ";$B1;1)+1)-НАЙТИ(" ";$B1;1)-1); 
      ЕСЛИОШИБКА(ПРАВСИМВ($B1;ДЛСТР($B1) - НАЙТИ(" ";$B1;1)); $B1)))
но такой вариант будет получше, если нужно точное соответствие по позициям значений, если же нет, то так:
Код:
  =И(
    ИЛИ(
      ЕЧИСЛО(НАЙТИ(ЕСЛИОШИБКА(ЛЕВСИМВ($A1;НАЙТИ(" ";$A1;1)-1); $A1);$B1)); 
      ЕЧИСЛО(НАЙТИ(ЕСЛИОШИБКА(ПСТР($A1;НАЙТИ(" ";$A1;1)+1;НАЙТИ(" ";$A1;НАЙТИ(" ";$A1;1)+1)-НАЙТИ(" ";$A1;1)-1);
        ЕСЛИОШИБКА(ПРАВСИМВ($A1;ДЛСТР($A1) - НАЙТИ(" ";$A1;1)); $A1));$B1)));
  НЕ(ЕПУСТО($A1));
  НЕ(ЕПУСТО($B1)))
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 17.08.2012 в 15:28.
DiemonStar вне форума Ответить с цитированием
Старый 17.08.2012, 16:33   #4
ZORRO2005
Форумчанин
 
Аватар для ZORRO2005
 
Регистрация: 26.11.2006
Сообщений: 584
По умолчанию

Azz100,

A1:Спортивный комплекс
B1:любимый спорт

Слово найдено? A1 заливаем?
ZORRO2005 вне форума Ответить с цитированием
Старый 17.08.2012, 16:53   #5
Azz100
Пользователь
 
Регистрация: 16.12.2009
Сообщений: 34
По умолчанию

ZORRO2005, нет, слово должно быть целым.
Azz100 вне форума Ответить с цитированием
Старый 17.08.2012, 17:04   #6
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Не, без Split такое делать я не согласен
Функция для УФ
Код:
Function Azz(a As String, ByVal b As String) As Boolean
Dim x
b = " " & b & " "
For Each x In Split(Application.Trim(a))
    If InStr(1, b, " " & x & " ", vbTextCompare) Then Azz = True: Exit Function
Next
End Function
Вложения
Тип файла: rar Azz.rar (6.1 Кб, 16 просмотров)
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 17.08.2012, 17:30   #7
ZORRO2005
Форумчанин
 
Аватар для ZORRO2005
 
Регистрация: 26.11.2006
Сообщений: 584
По умолчанию

Без макросов:
Вложения
Тип файла: rar Текст3.rar (3.7 Кб, 18 просмотров)
ZORRO2005 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск одинаковых значений с последующим выделением sevik111 Microsoft Office Excel 5 12.05.2011 17:49
Поиск ячейки соответствующую параметру с выделением andrey1 Microsoft Office Excel 3 23.03.2010 23:35
поиск с выделением photozaz Компоненты Delphi 1 22.05.2008 15:46