Уклањање дуплираних вредности у Екцел ВБА

Овај водич ће показати како уклонити дупликате помоћу методе РемовеДуплицатес у ВБА.

Метод РемовеДуплицатес

Када се подаци увезу или залепе у Екцел радни лист, они често могу да садрже дупликате вредности. Можда ћете морати да очистите долазне податке и уклоните дупликате.

Срећом, постоји једноставан метод унутар објекта Ранге ВБА који вам то омогућава.

1 Опсег („А1: Ц8“). РемовеДуплицатес Колоне: = 1, Заглавље: = клДа

Синтакса је:

РемовеДуплицатес ([Колоне], [Заглавље]

  • [Колоне] - Наведите у којим колонама се проверава дуплирање вредности. Све колоне се подударају да би се сматрале дупликатима.
  • [Заглавље] - Да ли подаци имају заглавље? клНо (подразумевано), клИес, клИесНоГуесс

Технички, оба параметра су опционална. Међутим, ако не наведете аргумент Колоне, дупликати неће бити уклоњени.

Подразумевана вредност заглавља је клНо. Наравно да је боље навести овај аргумент, али ако имате ред заглавља, мало је вероватно да ће се ред заглавља подударати као дупликат.

РемовеДуплицатес Напомене о употреби

  • Пре коришћења методе РемовеДуплицатес, морате навести опсег који ћете користити.
  • Метода РемовеДуплицатес ће уклонити све редове са пронађеним дупликатима, али ће задржати оригинални ред са свим вредностима.
  • Метода РемовеДуплицатес ради само на колонама, а не и на редовима, али ВБА код се може написати да би се ова ситуација исправила (погледајте касније).

Примери података за ВБА примере

Да би се приказало како функционише пример кода, користе се следећи примери података:

Уклоните дупле редове

Овај код ће уклонити све дупле редове само на основу вредности у колони А:

123 Суб РемовеДупсЕк1 ()Опсег („А1: Ц8“). РемовеДуплицатес Колоне: = 1, Заглавље: = клДаЕнд Суб

Уочите да смо изричито дефинисали распон „А1: Ц8“. Уместо тога, можете користити УседРанге. УседРанге ће одредити последњи коришћени ред и колону ваших података и применити РемовеДуплицатес на цео тај опсег:

123 Суб РемовеДупс_УседРанге ()АцтивеСхеет.УседРанге.РемовеДуплицатес Колоне: = 1, Заглавље: = клДаЕнд Суб

УседРанге је невероватно користан, уклањајући потребу да експлицитно дефинишете опсег.

Након покретања овог кода, ваш радни лист ће сада изгледати овако:

Имајте на уму да је, будући да је наведена само колона А (колона 1), дупликат „Јабуке“ који је раније био у 5. реду уклоњен. Међутим, количина (колона 2) је другачија.

Да бисмо уклонили дупликате, упоређујући више колона, можемо их навести помоћу методе Арраи.

Уклоните дупликате упоређујући више колона

123 Суб РемовеДупс_МултЦолумнс ()АцтивеСхеет.УседРанге.РемовеДуплицатес Колоне: = Арраи (1, 2), Хеадер: = клДаЕнд Суб

Низ говори ВБА да упореди податке користећи обе колоне 1 и 2 (А и Б).

Колоне у низу не морају бити узастопне.

123 Суб СимплеЕкампле ()АцтивеСхеет.УседРанге.РемовеДуплицатес Колоне: = Арраи (3, 1), Хеадер: = клДаЕнд Суб

У овом примеру, колоне 1 и 3 се користе за двоструко поређење.

Овај пример кода користи све три колоне за проверу дупликата:

123 Суб СимплеЕкампле ()АцтивеСхеет.УседРанге.РемовеДуплицатес Колоне: = Поље (1, 2, 3), Заглавље: = клДаЕнд Суб

Уклањање дуплираних редова са табеле

РемовеДуплицатес се такође може применити на Екцел табелу на потпуно исти начин. Међутим, синтакса је мало другачија.

1234 Суб СимплеЕкампле ()АцтивеСхеет.ЛистОбјецтс ("Табела1"). ДатаБодиРанге.РемовеДуплицатес Колоне: = Арраи (1, 3), _Заглавље: = клДаЕнд Суб

Ово ће уклонити дупликате у табели на основу колона 1 и 3 (А и Ц). Међутим, то не поправља обликовање боје у табели и видећете празне редове у боји који су остављени на дну табеле.

Уклоните дупликате из низа

Ако требате да уклоните дуплиране вредности из низа, наравно да можете исписати свој низ у Екцел, користити методу РемовеДуплицатес и поново увозити низ.

Међутим, такође смо написали ВБА процедуру за уклањање дупликата из низа.

Уклањање дупликата из редова података помоћу ВБА

Метода РемовеДуплицатес ради само на колонама података, али уз неко размишљање „ван кутије“ можете креирати ВБА процедуру за бављење редовима података.

Претпоставимо да ваши подаци изгледају овако на вашем радном листу:

Имате исте дупликате као и раније у колонама Б и Е, али их не можете уклонити помоћу методе РемовеДуплицатес.

Одговор је да помоћу ВБА креирате додатни радни лист, копирате податке у њега транспонујући их у колоне, уклоните дупликате, а затим их копирате назад преносећи их назад у редове.

12345678910111213141516171819202122232425262728293031323334353637 Суб ДуплицатесИнРовс ()„Искључите ажурирање екрана и упозорења - желимо да код ради глатко, а да корисник то не види'шта се догађаАпплицатион.СцреенУпдатинг = НетачноАпплицатион.ДисплаиАлертс = Нетачно'Додајте нови радни листСхеетс.Адд Афтер: = АцтивеСхеет„Позовите нови радни лист„ ЦопиСхеет “АцтивеСхеет.Наме = "Копирај лист"'Копирајте податке са оригиналног радног листаТабеле ("ДатаИнРовс"). УседРанге.Цопи'Активирајте нови лист који је креиранТабеле („ЦопиСхеет“). Активирајте'Залепи транспонуј податке тако да су сада у колонамаАцтивеСхеет.Ранге ("А1"). ПастеСпециал Пасте: = клПастеАлл, Операција: = клНоне, СкипБланкс: = _Нетачно, Транспонуј: = Тачно„Уклоните дупликате за колоне 1 и 3АцтивеСхеет.УседРанге.РемовеДуплицатес Колоне: = Арраи (1, 3), Хеадер _: = клДа'Обришите податке у оригиналном радном листуТабеле ("ДатаИнРовс"). УседРанге.ЦлеарЦонтентс'Копирајте колоне података са новог креираног радног листаТабеле („Цописхеет“). УседРанге.Цопи'Активирајте оригинални листТабеле ("ДатаИнРовс"). Активирајте„Залепите транспозицију података који се не дуплицирајуАцтивеСхеет.Ранге ("А1"). ПастеСпециал Пасте: = клПастеАлл, Операција: = клНоне, СкипБланкс: = _Нетачно, Транспонуј: = Тачно„Избришите лист за копирање - више није потребноТабеле („Цописхеет“). Избришите'Активирајте оригинални листТабеле ("ДатаИнРовс"). Активирајте„Поново укључите ажурирање екрана и упозорењаАпплицатион.СцреенУпдатинг = ТачноАпплицатион.ДисплаиАлертс = ТачноЕнд Суб

Овај код претпоставља да се изворни подаци у редовима држе на радном листу под називом „ДатаИнРовс“

Након покретања кода, ваш радни лист ће изгледати овако:

Дупликат „јабуке“ у колони Е је сада уклоњен. Корисник се вратио у чист положај, без туђих радних листова, а цијели процес је прошао глатко без треперења екрана или порука упозорења.

Ви ће помоћи развој сајта, дељење страницу са пријатељима

wave wave wave wave wave