Страницы: 1
RSS
Показать значения опроса, если Вася выбрал Петю и Петя выбрал Васю, найти попарные совпадения, если и я выбрал вас и вы выбрали меня
 
Здравствуйте,
Не сталкивались ли вы с такой простой задачей как опрос в excel? Например Петя проголосовал за Васю и Вася проголосовал за Петю, как найти среди их прочих ответов именно такое соответствие тоесть показать только тех за кого проголосовал Петя, если и они в свою очередь проголосовали за Петю.

Такой вот список:
васяпетя
васястепа
васядаша
петявася
петяСтепа
Из этого списка должны остаться только вася - петя
Пробовал Многоразовый ВПР, тоесть находим все вхождения за которые проголосовал вася, потом перебираем каждое найденное значение тем же множественным ВПР и потом сравниваем есть ли совпадения - но как то сложновато получается...
Еще не плохой вариант Парная подсветка дубликатов, но мне надо чтоб подсвечивал не все одинаковые, а именно те в которых вася выбрал петю и петя выбрал васю.
Каждое препятствие это новая возможность чему-то научиться.
 
Здравствуйте.
Как вариант, доп. столбец и сводная
 
Я пока только так вижу решение:
В С2 вставляем формулу массива:
Код
=ЕСЛИОШИБКА(ПОИСКПОЗ(СЦЕПИТЬ(A2;B2);СЦЕПИТЬ($B$2:$B$6;$A$2:$A$6);0);"")

и тянем ее вниз.
Имеем в результате номера строк (за исключением заголовка), где есть совпадения.
Потом фильтруем, исключая пустые, по этому столбцу.

P.S. Формула массива!
P.P.S. Массива, Карл!!! :)
Кому решение нужно - тот пример и рисует.
 
Без изысков
Код
Sub Мяу()
    Dim oDic As Object, i&
    Dim arr, oDicItems
    Set oDic = CreateObject("Scripting.Dictionary")
    arr = [A1].CurrentRegion.Value
    For i = 2 To UBound(arr)
        oDic.Item(arr(i, 1) & "|" & arr(i, 2)) = arr(i, 2) & "|" & arr(i, 1)
    Next
    oDicItems = oDic.Items
    For i = 0 To UBound(oDicItems)
        If oDic.Exists(oDicItems(i)) Then
            Cells(i + 2, 1).Resize(, 2).Interior.Color = vbRed
        End If
    Next
End Sub
Изменено: RAN - 11.11.2015 17:59:49
 
Pelena, Ух ты, здорово!
А что это за доп. поле - никак не вникну. Но все работает вроде... Вот спасибо. Буду разбираться.

Пытливый, RAN, спасибо, отпишусь завтра про эти варианты.  
Изменено: Андрей Фетисов - 11.11.2015 18:15:06
Каждое препятствие это новая возможность чему-то научиться.
 
Цитата
Андрей Фетисов написал: что это за доп. поле
в доп. столбце формула: 1 - значит есть "взаимность", а 0 - значит - нет
 
RAN, - да, вариант с макросом - красиво. Пытаюсь адаптировать чтоб понимал имена с пробелами типа: Васислий Васильевич Пупкин  
Каждое препятствие это новая возможность чему-то научиться.
 
Пробелы макросу до лампочки. (Если, конечно, в обоич строках их одинаковое количество.
При разном следует использовать
Код
Application.Trim(arr(i,1))

Заменить во всех местах кода.
 
Цитата
Андрей Фетисов написал:
Из этого списка должны остаться только вася - петя
off.
Я бы оставил только Васю и Дашу.
Это здоровый выбор.
 
Цитата
RAN написал: Пробелы макросу до лампочки.
Да Вы правы. Хочу поблагодарить еще раз RAN, за макрос подсветки "взаимностей" и Pelena, за чудесную формулу {=--ИЛИ($B$2:$B$7&$A$2:$A$7=A2&B2)}
Оба варианта прелестны и полностью решают мой вопрос!
RESOLVED
Каждое препятствие это новая возможность чему-то научиться.
 
Цитата
Вася выбрал Петю и Петя выбрал Васю
Лучше, если вместо Васи - Валя, а то как-то неправильно :)
 
Виктор, Вали нет в примере. :(
 
Так и я о том же :)
 
Цитата
k61 написал: off.
Я бы оставил только Васю и Дашу.
Это здоровый выбор.
в документе здравоохранения Медицинская Классификация Болезней - этого не прописано! - не вводите людей в заблуждение... ваши представления о здоровье не просто off на ветке "значения опроса", а ложь чистой воды...  :evil:    
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
JeyCi
Весьма странный комментарий.
Это о чем? И зачем?
 
Цитата
RAN написал: Это о чем? И зачем?
это факт - в ответ на off
зачем был off - я не знаю (т.к. не мой)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
JeyCi,   :D  
Цитата
JeyCi написал:
документе здравоохранения Медицинская Классификация Болезней - этого не прописано!
тут вроде как ни кто болезней не приписал все как бы здоровы просто выразили свое мнение k61, свое ему нравится имя Даша, у vikttur, имя Валя, мне нравится Оля супруга моя кому и чем мы обязаны поклонятся и чем вводим в заблуждение и кого если Вас извиняйте на планете эксель вроде как в правилах не запрещено выражать симпатию к противоположному полу
пс если не прав поправьте всегда принимаю критику адекватно
Лень двигатель прогресса, доказано!!!
 
мне кстати Elena,  нравится на  на уровне
 
Цитата
Андрей Фетисов написал:Pelena, Ух ты, здорово!
и чё делать без Медицинскай Классификации Болезней голову пеплом посыпать или извинения требовать чтоб за такие Ух ты, здорово все каялись
Лень двигатель прогресса, доказано!!!
 
Цитата
Андрей Фетисов написал:
поблагодарить Pelena, за чудесную формулу
+1! Красиво!
особенно:
--
минут 5 думал, зачем это! Ещё можно:
*1
Жалко ++ в екселе не реализован (как +1)
Программист - человек, который решает задачу, о которой никто не знает, таким способом, который никто не понимает.
 
Цитата
RAN написал:
Application.Trim(arr(i,1))
Здравствуйте RAN, Pelena, после 1831 строки макрос съехал и стал подсвечивать не верные взаимосвязи. Возможно вам будет интересно понять причину, я же не нашел почему, лишь смог проверить работу макроса формулой уважаемой Pelena, нашел расхождения, прикрепил.
Возможно дело в пробелах - попробовал изменить макрос как советовал RAN (Application.Trim(arr(i, 5)),  но видимо не так сделал:
Код
Sub МЯУ()
    Dim oDic As Object, i&
    Dim arr, oDicItems
    Set oDic = CreateObject("Scripting.Dictionary")
    arr = [A1].CurrentRegion.Value
    For i = 2 To UBound(arr)
        oDic.Item (Application.Trim(arr(i, 5)) & "|" & Application.Trim(arr(i, 6)) = Application.Trim(arr(i, 6)) & "|" & Application.Trim(arr(i, 5)))
        'oDic.Item(arr(i, 5) & "|" & arr(i, 6)) = arr(i, 6) & "|" & arr(i, 5)
    Next
    oDicItems = oDic.Items
    For i = 0 To UBound(oDicItems)
        If oDic.Exists(oDicItems(i)) Then
            Cells(i + 2, 5).Resize(, 2).Interior.Color = vbRed
        End If
    Next
End Sub
Интересно, в чем ошибка  - в макросе или в данных файла? Пока пользуюсь формулой {=--ИЛИ($F$2:$F$5019&$E$2:$E$5019=E2&F2)}
Изменено: Андрей Фетисов - 04.12.2015 16:49:40 (Добавил файл)
Каждое препятствие это новая возможность чему-то научиться.
 
Бартюкова Ирина Алексеевна Аносов Михаил Анатольевич 1
Бартюкова Ирина Алексеевна Аносов Михаил Анатольевич 1
строки 1628 1629
а дальше счет сбился
 
RAN, тоесть дело в задвоенном голосе? Странно что такое прошло - у меня проверка стояла на повторы, какой то сбой наверное. Если дело в этом то просто удалю задвоение.

07/12/15 Да, дело в задвоенном голосе, удалил и все встало на место. Спасибо RAN, макрос быстро и качественно работает.
RESOLVED
Изменено: Андрей Фетисов - 07.12.2015 09:15:42 (Дело в задвоенных ответах.)
Каждое препятствие это новая возможность чему-то научиться.
Страницы: 1
Наверх