Представив значения исходной строки в диапазоне @[col]:[col5], как массив, сравнить их со всеми другими строками в этом же диапазоне как массивами, игнорируя последовательность значений и выписать в соответствующее исходной строке поле [@diff] различие с каждой из строк, в которую значения исходной входят полностью, вне зависимости от их (значений) последовательности. Если различий несколько или с несколькими строками, то перечислить их в ячейке [@diff] через пробел.
А вторая, менее приоритетная:
Если набор значений каких либо строк совпадёт, подсветить ячейки [@cols] в обоих строках красным.
Ячейка [@cols] в примере просто сцепляет через пробел диапазон @[col]:[col5]
Буду рад любым комментариям, спасибо!
Здравствуте, уважаемые участники форума!
Предо мной стоят две задачи, первая:
Представив значения исходной строки в диапазоне @[col]:[col5], как массив, сравнить их со всеми другими строками в этом же диапазоне как массивами, игнорируя последовательность значений и выписать в соответствующее исходной строке поле [@diff] различие с каждой из строк, в которую значения исходной входят полностью, вне зависимости от их (значений) последовательности. Если различий несколько или с несколькими строками, то перечислить их в ячейке [@diff] через пробел.
А вторая, менее приоритетная:
Если набор значений каких либо строк совпадёт, подсветить ячейки [@cols] в обоих строках красным.
Ячейка [@cols] в примере просто сцепляет через пробел диапазон @[col]:[col5]
Как будет выглядеть результат, если в диапазон добавить строку 1 2 3 4 5 на любом другом языке? Сразу говорю - пока делать не берусь. Хотя обработать именно пример - не сложно. И проще думаю сравнивать элементы массивов с строкой, убирая совпадения заменой, что осталось - пишем в diff.
Как будет выглядеть результат, если в диапазон добавить строку 1 2 3 4 5 на любом другом языке? Сразу говорю - пока делать не берусь. Хотя обработать именно пример - не сложно. И проще думаю сравнивать элементы массивов с строкой, убирая совпадения заменой, что осталось - пишем в diff.Hugo
buchlotnik, посмотрел ваш пример, осмыслил принципы работы, спасибо, но к сожалению он не решит моей задачи, т.к. работает только с одной строкой, а как масштабировать данный принцип на все я с со своим уровне знания Excel затрудняюсь представить. А по раскраске дублей ваш пример можно считать решением, он ещё мне даже и в другом деле помог: как сортировать значения при конкатенации, осталось только разобраться как это сделать на динамическом кол-ве значений. Спасибо!
buchlotnik, посмотрел ваш пример, осмыслил принципы работы, спасибо, но к сожалению он не решит моей задачи, т.к. работает только с одной строкой, а как масштабировать данный принцип на все я с со своим уровне знания Excel затрудняюсь представить. А по раскраске дублей ваш пример можно считать решением, он ещё мне даже и в другом деле помог: как сортировать значения при конкатенации, осталось только разобраться как это сделать на динамическом кол-ве значений. Спасибо!Bosch
Bosch, тогда дайте примерчик понагляднее - может и динамический вариант получится. Сколько примерно уникальных значений будет в вашем динамическом диапазоне? сколько столбцов в реале?
Bosch, тогда дайте примерчик понагляднее - может и динамический вариант получится. Сколько примерно уникальных значений будет в вашем динамическом диапазоне? сколько столбцов в реале?buchlotnik
buchlotnik, столбцов в реале семь, строк сколько угодно, уникальных значений соответственно "чуть" меньше чем сколько угодно. Содержимое ячеек строковые данные. Вот, пожалуйста, более расширенный пример со случайными словами:
buchlotnik, столбцов в реале семь, строк сколько угодно, уникальных значений соответственно "чуть" меньше чем сколько угодно. Содержимое ячеек строковые данные. Вот, пожалуйста, более расширенный пример со случайными словами:Bosch
Bosch, здравствуйте. Вдруг макросом приглянется). Строчек может быть сколько угодно, как и значений в А:G, а вот если количество столбцов изменится, в коде придется поправить пару циферек. Формулу для УФ взяла у buchlotnik, только переписала для столбца diff:
Код
=СЧЁТЕСЛИ($I:$I;I1)>1
Bosch, здравствуйте. Вдруг макросом приглянется). Строчек может быть сколько угодно, как и значений в А:G, а вот если количество столбцов изменится, в коде придется поправить пару циферек. Формулу для УФ взяла у buchlotnik, только переписала для столбца diff:
Manyasha, я бы UniqueValues сделал публичным объектом (можно для модуля) - чтоб не заполнять его/её на каждой строке. Будет значительно быстрее - хотя если строк всего десяток, то можно не ускорять. Но ведь тот алгоритм не решает задачу. Я не зря про 12345 спрашивал - пример с словами проясняет задачу.
Manyasha, я бы UniqueValues сделал публичным объектом (можно для модуля) - чтоб не заполнять его/её на каждой строке. Будет значительно быстрее - хотя если строк всего десяток, то можно не ускорять. Но ведь тот алгоритм не решает задачу. Я не зря про 12345 спрашивал - пример с словами проясняет задачу.Hugo
Hugo, UniqueValue я согласна с Вами, так и делала вчера, но мой код выдавал ошибку, решила выложить хоть как-нибудь) Сейчас поправила:
[vba]
Код
Sub diff() lr = Cells(Rows.Count, 1).End(xlUp).Row Dim arrUniq As Collection Set arrUniq = UniqueValues(Range("A2:G" & lr).Value) For i = 2 To lr newStr = "" For Each v In arrUniq If InStr(Cells(i, 8), CStr(v)) = False Then newStr = newStr & v & " " Next v Cells(i, 9) = newStr Next i End Sub
[/vba] [vba]
Код
Function UniqueValues(ByVal arr) As Collection Set UniqueValues = New Collection: On Error Resume Next For Each v In arr v = Trim(v): If Len(v) Then UniqueValues.Add CStr(v), CStr(v) Next v End Function
я не очень поняла, в чем некоррекность работы моего кода? Расскажите, пожалуйста.)
Hugo, UniqueValue я согласна с Вами, так и делала вчера, но мой код выдавал ошибку, решила выложить хоть как-нибудь) Сейчас поправила:
[vba]
Код
Sub diff() lr = Cells(Rows.Count, 1).End(xlUp).Row Dim arrUniq As Collection Set arrUniq = UniqueValues(Range("A2:G" & lr).Value) For i = 2 To lr newStr = "" For Each v In arrUniq If InStr(Cells(i, 8), CStr(v)) = False Then newStr = newStr & v & " " Next v Cells(i, 9) = newStr Next i End Sub
[/vba] [vba]
Код
Function UniqueValues(ByVal arr) As Collection Set UniqueValues = New Collection: On Error Resume Next For Each v In arr v = Trim(v): If Len(v) Then UniqueValues.Add CStr(v), CStr(v) Next v End Function
Ну там в примере со словами ведь другой результат показан. И вопрос звучал так: "различие с каждой из строк, в которую значения исходной входят полностью". А с теми, куда полностью не входит - сравнивать значит не нужно. Т.е. мои одиночные 12345 ничего бы в результате не изменили.
Ну там в примере со словами ведь другой результат показан. И вопрос звучал так: "различие с каждой из строк, в которую значения исходной входят полностью". А с теми, куда полностью не входит - сравнивать значит не нужно. Т.е. мои одиночные 12345 ничего бы в результате не изменили.Hugo