Здравствуйте! Имеется столбец со списком фамилий, в котором применяется условное форматирование (заливка ячеек цветом). Часть ячеек выделена цветом, а в некоторых ячейках заливка отсутствует, эти ячейки необходимо поместить в массив, а затем вывести полученный список в соседний столбец или в любой другой. С VBA имею дело крайне редко, а потому не получается слепить из имеющихся здесь примеров необходимое решение(( Может быть массивы здесь вообще лишние и это можно сделать как-то по-другому?
Здравствуйте! Имеется столбец со списком фамилий, в котором применяется условное форматирование (заливка ячеек цветом). Часть ячеек выделена цветом, а в некоторых ячейках заливка отсутствует, эти ячейки необходимо поместить в массив, а затем вывести полученный список в соседний столбец или в любой другой. С VBA имею дело крайне редко, а потому не получается слепить из имеющихся здесь примеров необходимое решение(( Может быть массивы здесь вообще лишние и это можно сделать как-то по-другому?iraci
Сообщение отредактировал iraci - Среда, 08.02.2017, 08:53
Если более подробно, то задача такая: имеется два списка людей, которые необходимо сравнить, что делается с помощью условного форматирования по правилам выделения ячеек - ищутся повторяющиеся значения. В файле с примером оно так, как примерно должно выглядеть, то есть в сокращенном варианте, а нужный список сделан вручную. В реальной жизни будет большое количество строк и необходимо автоматизировать выбор нужных фамилий и формирование новых списков. Заранее спасибо за помощь!
Если более подробно, то задача такая: имеется два списка людей, которые необходимо сравнить, что делается с помощью условного форматирования по правилам выделения ячеек - ищутся повторяющиеся значения. В файле с примером оно так, как примерно должно выглядеть, то есть в сокращенном варианте, а нужный список сделан вручную. В реальной жизни будет большое количество строк и необходимо автоматизировать выбор нужных фамилий и формирование новых списков. Заранее спасибо за помощь!iraci
iraci, всмысле что с чем сравнить? Поясните пожалуйста, не окрашенные ячейки они из какого столбца проверялись? вывести в отдельный столбец неокрашенные ячейки нужно? А как определить какие ячейки будут окрашиваться какие нет?
iraci, всмысле что с чем сравнить? Поясните пожалуйста, не окрашенные ячейки они из какого столбца проверялись? вывести в отдельный столбец неокрашенные ячейки нужно? А как определить какие ячейки будут окрашиваться какие нет?Kamikadze_N
Да, вывести в отдельный столбец нужно неокрашенные ячейки. Неокрашенные из столбца А - в столбец D, неокрашенные из столбца В - в столбец E. Какие ячейки окрашиваются, а какие нет - это решает условное форматирование, сравнивая списки. Изначально я сравниваю два списка работников, используя условное форматирование. Список в столбце А - это работающие в текущем месяце, в столбце В - в предыдущем. Мне нужно получить списки людей, принятых на работу в текущем месяце и уволенных в предыдущем. То есть получить разницу между двумя списками. Условное форматирование помогает наглядно увидеть разницу, но это лишь полуавтомат. Реальные списки содержат более тысячи записей, поэтому и возникает необходимость автоматом получить списки уволенных и вновь принятых, иначе их придется выуживать, пролистывая все строки и вручную выбирая ячейки с отсутствием заливки. Но это ведь не вариант(( Окрашенные ячейки содержат фамилии, которые есть в обоих списках, а если ячейка не окрашена, то значит этой фамилии в соседнем списке нет. Эти то фамилии меня и интересуют. В результате должны появиться два списка: принятые на работу в текущем месяце (столбец D) и уволенные в предыдущем (столбец E). В примере я вручную просто скопировала содержимое невыделенных ячеек, чтобы было видно, как оно должно получиться. Но такой список конечно должен формироваться автоматом. Заново прилагаю немного измененный файл с примером. Задача как обычно специфическая, надеюсь с третьей попытки мне удалось описать ее особенности
Да, вывести в отдельный столбец нужно неокрашенные ячейки. Неокрашенные из столбца А - в столбец D, неокрашенные из столбца В - в столбец E. Какие ячейки окрашиваются, а какие нет - это решает условное форматирование, сравнивая списки. Изначально я сравниваю два списка работников, используя условное форматирование. Список в столбце А - это работающие в текущем месяце, в столбце В - в предыдущем. Мне нужно получить списки людей, принятых на работу в текущем месяце и уволенных в предыдущем. То есть получить разницу между двумя списками. Условное форматирование помогает наглядно увидеть разницу, но это лишь полуавтомат. Реальные списки содержат более тысячи записей, поэтому и возникает необходимость автоматом получить списки уволенных и вновь принятых, иначе их придется выуживать, пролистывая все строки и вручную выбирая ячейки с отсутствием заливки. Но это ведь не вариант(( Окрашенные ячейки содержат фамилии, которые есть в обоих списках, а если ячейка не окрашена, то значит этой фамилии в соседнем списке нет. Эти то фамилии меня и интересуют. В результате должны появиться два списка: принятые на работу в текущем месяце (столбец D) и уволенные в предыдущем (столбец E). В примере я вручную просто скопировала содержимое невыделенных ячеек, чтобы было видно, как оно должно получиться. Но такой список конечно должен формироваться автоматом. Заново прилагаю немного измененный файл с примером. Задача как обычно специфическая, надеюсь с третьей попытки мне удалось описать ее особенности iraci
Если хотите именно макросом, то можно так, например: [vba]
Код
Sub ttt() Dim i&, dic1 As Object, dic2 As Object, key Set dic1 = CreateObject("scripting.dictionary") Set dic2 = CreateObject("scripting.dictionary") [d2].Resize([d2].CurrentRegion.Rows.Count, 2).Offset(1).ClearContents For i = 3 To Cells(Rows.Count, 1).End(xlUp).Row dic1(Trim(Cells(i, 1))) = i Next i For i = 3 To Cells(Rows.Count, 2).End(xlUp).Row dic2(Trim(Cells(i, 2))) = i Next i i = 3 For Each key In dic1.keys If Not dic2.exists(key) Then Cells(i, 4) = key: i = i + 1 Next key i = 3 For Each key In dic2.keys If Not dic1.exists(key) Then Cells(i, 5) = key: i = i + 1 Next key End Sub
[/vba]
iraci, здравствуйте, Ваша формула в I1
Цитата
формула не работет для excel 2007((
должна работать в 2007-м, просто она неправильно записана. Попробуйте так:
Если хотите именно макросом, то можно так, например: [vba]
Код
Sub ttt() Dim i&, dic1 As Object, dic2 As Object, key Set dic1 = CreateObject("scripting.dictionary") Set dic2 = CreateObject("scripting.dictionary") [d2].Resize([d2].CurrentRegion.Rows.Count, 2).Offset(1).ClearContents For i = 3 To Cells(Rows.Count, 1).End(xlUp).Row dic1(Trim(Cells(i, 1))) = i Next i For i = 3 To Cells(Rows.Count, 2).End(xlUp).Row dic2(Trim(Cells(i, 2))) = i Next i i = 3 For Each key In dic1.keys If Not dic2.exists(key) Then Cells(i, 4) = key: i = i + 1 Next key i = 3 For Each key In dic2.keys If Not dic1.exists(key) Then Cells(i, 5) = key: i = i + 1 Next key End Sub
iraci, или вот вариант вообще без условного форматирования. С подсветкой принятых и уволеных макросом и формированием списков в соответствующих столбацa
iraci, или вот вариант вообще без условного форматирования. С подсветкой принятых и уволеных макросом и формированием списков в соответствующих столбацaKamikadze_N