Добрый день хочу уточнить как можно производить поиск значения вот по такой логике ... Есть три столбца Начинаем с "А" там стоит имя Иванов запоминаем его смотрим какие имена стоят в столбце B и C запоминаем их Потом фильтруем каждый из столбцов на эти три сохранённых значения и смотрим стоят ли в соседних столбцах другие имена Если да то это имя фильтруем по каждому столбцу если находим опять другое имя в строчке то фильтруем его и так пока все не кончатся а потом нужно создать группу как в примере
Добрый день хочу уточнить как можно производить поиск значения вот по такой логике ... Есть три столбца Начинаем с "А" там стоит имя Иванов запоминаем его смотрим какие имена стоят в столбце B и C запоминаем их Потом фильтруем каждый из столбцов на эти три сохранённых значения и смотрим стоят ли в соседних столбцах другие имена Если да то это имя фильтруем по каждому столбцу если находим опять другое имя в строчке то фильтруем его и так пока все не кончатся а потом нужно создать группу как в примере Elhust
Берём массив из трёх фамилий (делаем одномерный), сортируем, заносим как ключ в словарь с присвоением номера группы. А если такой ключ уже есть в словаре - извлекаем и прописываем номер. Вместо словаря в данном случае можно использовать коллекцию. И никаких сортировок - сразу решаем главную задачу. И сразу всем сотрудникам/группам. Код писать пока некогда.
Берём массив из трёх фамилий (делаем одномерный), сортируем, заносим как ключ в словарь с присвоением номера группы. А если такой ключ уже есть в словаре - извлекаем и прописываем номер. Вместо словаря в данном случае можно использовать коллекцию. И никаких сортировок - сразу решаем главную задачу. И сразу всем сотрудникам/группам. Код писать пока некогда.Hugo
Sub мяу() Dim odic As Object, i&, j&, tmp, s$, a() Set odic = CreateObject("Scripting.Dictionary") For i = 2 To 13 ReDim a(2) a(0) = Cells(i, 1).Value a(1) = Cells(i, 4).Value a(2) = Cells(i, 8).Value For j = 0 To 1 If a(j) > a(j + 1) Then tmp = a(j): a(j) = a(j + 1): a(j + 1) = tmp End If Next s = Join(a, "|") If odic.exists(s) Then Cells(i, 9).Value = odic.Item(s) Else odic.Item(s) = odic.Count + 1 Cells(i, 9).Value = odic.Item(s) End If Next End Sub
[/vba]
PS Пытался сочинить замудреное, не вышло. А когда выложил, что вышло, смотрю - как пошагово инструкцию Игоря выполнял.
[vba]
Код
Sub мяу() Dim odic As Object, i&, j&, tmp, s$, a() Set odic = CreateObject("Scripting.Dictionary") For i = 2 To 13 ReDim a(2) a(0) = Cells(i, 1).Value a(1) = Cells(i, 4).Value a(2) = Cells(i, 8).Value For j = 0 To 1 If a(j) > a(j + 1) Then tmp = a(j): a(j) = a(j + 1): a(j + 1) = tmp End If Next s = Join(a, "|") If odic.exists(s) Then Cells(i, 9).Value = odic.Item(s) Else odic.Item(s) = odic.Count + 1 Cells(i, 9).Value = odic.Item(s) End If Next End Sub
[/vba]
PS Пытался сочинить замудреное, не вышло. А когда выложил, что вышло, смотрю - как пошагово инструкцию Игоря выполнял. RAN
Быть или не быть, вот в чем загвоздка!
Сообщение отредактировал RAN - Воскресенье, 22.07.2018, 16:25
RAN, Hugo, Спасибо большое за содействие ! и помощь но немного не то получилось всё никак объяснить не могу ( Вот я вложил пример уже 3 ... (( Там группа не правильно создаётся у вас каждая строчка получается новая группа а они формируются примерно так Запоминаем первую строчку и ищем каждое значение в каждом столбце если нашли совпадения то ищем новые имена в строчке совпадения и это группа
RAN, Hugo, Спасибо большое за содействие ! и помощь но немного не то получилось всё никак объяснить не могу ( Вот я вложил пример уже 3 ... (( Там группа не правильно создаётся у вас каждая строчка получается новая группа а они формируются примерно так Запоминаем первую строчку и ищем каждое значение в каждом столбце если нашли совпадения то ищем новые имена в строчке совпадения и это группаElhust
Sub мяв() Dim odic As Object, i&, flag As Boolean Set odic = CreateObject("Scripting.Dictionary") odic.Item(Cells(2, 1).Value) = 1 odic.Item(Cells(2, 4).Value) = 1 odic.Item(Cells(2, 8).Value) = 1 Cells(2, 9) = 1 For i = 2 To 12 flag = False If Not odic.exists(Cells(i, 1).Value) Then If Not odic.exists(Cells(i, 4).Value) Then If Not odic.exists(Cells(i, 8).Value) Then flag = True End If End If End If If flag = False Then odic.Item(Cells(i, 1).Value) = 1 odic.Item(Cells(i, 4).Value) = 1 odic.Item(Cells(i, 8).Value) = 1 Cells(i, 9) = 1 End If Next End Sub
[/vba]
[vba]
Код
Sub мяв() Dim odic As Object, i&, flag As Boolean Set odic = CreateObject("Scripting.Dictionary") odic.Item(Cells(2, 1).Value) = 1 odic.Item(Cells(2, 4).Value) = 1 odic.Item(Cells(2, 8).Value) = 1 Cells(2, 9) = 1 For i = 2 To 12 flag = False If Not odic.exists(Cells(i, 1).Value) Then If Not odic.exists(Cells(i, 4).Value) Then If Not odic.exists(Cells(i, 8).Value) Then flag = True End If End If End If If flag = False Then odic.Item(Cells(i, 1).Value) = 1 odic.Item(Cells(i, 4).Value) = 1 odic.Item(Cells(i, 8).Value) = 1 Cells(i, 9) = 1 End If Next End Sub
RAN, Большая благодарность ! понял что нужно капать в сторону как их называют умные массивы .. ни когда не пользовался этим инструментом .. буду стараться расставить группу два и так далее на сколько понимаю чтобы он создавал след группу нужно всё это засунуть в цикл но по уникальному списку столбца "А" а так как мы ищем в каждом столбце то этот список должен ещё и пополнятся в процессе становления группы чтобы при след итерации учесть все наименования что входят в группу ... а ещё думаю что нужно научиться более ясно выражать свои мысли ..
RAN, Большая благодарность ! понял что нужно капать в сторону как их называют умные массивы .. ни когда не пользовался этим инструментом .. буду стараться расставить группу два и так далее на сколько понимаю чтобы он создавал след группу нужно всё это засунуть в цикл но по уникальному списку столбца "А" а так как мы ищем в каждом столбце то этот список должен ещё и пополнятся в процессе становления группы чтобы при след итерации учесть все наименования что входят в группу ... а ещё думаю что нужно научиться более ясно выражать свои мысли ..Elhust