Версия для слабовидящих
Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

 

= Мир MS Excel/Удаление дубликатов внутри массива - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Удаление дубликатов внутри массива
Ed_Vard Дата: Четверг, 28.07.2011, 20:17 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Доброго времени суток уважаемые форумчане!
Прошу помощи!
В макросе переношу данные с одного листа книги в другой - но строки содержат дубликаты, которые необходимо удалить. Но дело в том - что уникальное значение для отлова дубликата появляться только путем склеивания нескольких ячеек пири вставке на лист из массива!
Возможно ли отловить эти дуликаты внутри массива - до вставки на лист?
 
Ответить
СообщениеДоброго времени суток уважаемые форумчане!
Прошу помощи!
В макросе переношу данные с одного листа книги в другой - но строки содержат дубликаты, которые необходимо удалить. Но дело в том - что уникальное значение для отлова дубликата появляться только путем склеивания нескольких ячеек пири вставке на лист из массива!
Возможно ли отловить эти дуликаты внутри массива - до вставки на лист?

Автор - Ed_Vard
Дата добавления - 28.07.2011 в 20:17
Serge_007 Дата: Четверг, 28.07.2011, 20:29 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Здравствуйте.

В любом случае необходим файл с макросом.


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеЗдравствуйте.

В любом случае необходим файл с макросом.

Автор - Serge_007
Дата добавления - 28.07.2011 в 20:29
Ed_Vard Дата: Четверг, 28.07.2011, 23:31 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Опс - да прошу прощения - торопился - забыл пример прицепить
Данные беруться с листа "данные" и переносться на лист "Сверка"
На листе данные создать уникальные значения не получаеться - т.к. там идет импорт из xml-файлов - и как то непонятно там все делаеться sad
Так вот - нужно удалить дубликаты перед вставкой на лист "сверка"
Что-то с памятью совсем что-то стало. Уникальное значение формируеться в столбце А - и именно по этому столбцу нужно выбрать дубликаты и удалить - остави только одно.
К сообщению приложен файл: 7558140.xls (89.0 Kb)


Сообщение отредактировал Ed_Vard - Пятница, 29.07.2011, 00:51
 
Ответить
СообщениеОпс - да прошу прощения - торопился - забыл пример прицепить
Данные беруться с листа "данные" и переносться на лист "Сверка"
На листе данные создать уникальные значения не получаеться - т.к. там идет импорт из xml-файлов - и как то непонятно там все делаеться sad
Так вот - нужно удалить дубликаты перед вставкой на лист "сверка"
Что-то с памятью совсем что-то стало. Уникальное значение формируеться в столбце А - и именно по этому столбцу нужно выбрать дубликаты и удалить - остави только одно.

Автор - Ed_Vard
Дата добавления - 28.07.2011 в 23:31
nilem Дата: Пятница, 29.07.2011, 07:52 | Сообщение № 4
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Добавил удаление дубликатов по 1-му столбцу (у Вас ведь 2007?).
Убрал -1 в For i = 1 To UBound(x), т.е. проходим до конца (до верхней границы) массива х.
Добавил -1 в With [a5:p5].Resize(i - 1), т.к. последний Next i дает на единицу больше, чем верхняя граница массива х.
К сообщению приложен файл: EdVard_7558140.zip (34.9 Kb)


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеДобавил удаление дубликатов по 1-му столбцу (у Вас ведь 2007?).
Убрал -1 в For i = 1 To UBound(x), т.е. проходим до конца (до верхней границы) массива х.
Добавил -1 в With [a5:p5].Resize(i - 1), т.к. последний Next i дает на единицу больше, чем верхняя граница массива х.

Автор - nilem
Дата добавления - 29.07.2011 в 07:52
Ed_Vard Дата: Пятница, 29.07.2011, 09:25 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

nilem, Спасибо за помощь.
Но нет - в связи с тем - что используемый метод импорта xml не поддерживаеться в офисе 2007-2010 - то у меня офис 2003 - в котором данный метод удаления дубликатов не получаеться - я думал над ним! Если Вы откроете мой файл в 2003 офисе - то увидите - что на листе данные выделена граница импортируемых данных - и там в конце присутствует пустая строка - поэтому нужно использовать -1.
Нужно что то другое для удаления дубликатов.
Я использовал вот такой макрос для удаления дубликатов найденый на планете:
Sub DelRows1() Application.ScreenUpdating = False Dim x, i As Long x = Range([A5], Cells(Rows.Count, 1).End(xlUp)).Value For i = 5 To UBound(x) Step 0 'If Application.WorksheetFunction.CountA(Range(Cells(i, 1), Cells(i, 3))) < 3 Then Rows(i).Delete 'End If Next End Sub

Но он слишком медленно работает - у меня порядка 25 000 строк sad


Сообщение отредактировал Ed_Vard - Пятница, 29.07.2011, 09:38
 
Ответить
Сообщениеnilem, Спасибо за помощь.
Но нет - в связи с тем - что используемый метод импорта xml не поддерживаеться в офисе 2007-2010 - то у меня офис 2003 - в котором данный метод удаления дубликатов не получаеться - я думал над ним! Если Вы откроете мой файл в 2003 офисе - то увидите - что на листе данные выделена граница импортируемых данных - и там в конце присутствует пустая строка - поэтому нужно использовать -1.
Нужно что то другое для удаления дубликатов.
Я использовал вот такой макрос для удаления дубликатов найденый на планете:
Sub DelRows1() Application.ScreenUpdating = False Dim x, i As Long x = Range([A5], Cells(Rows.Count, 1).End(xlUp)).Value For i = 5 To UBound(x) Step 0 'If Application.WorksheetFunction.CountA(Range(Cells(i, 1), Cells(i, 3))) < 3 Then Rows(i).Delete 'End If Next End Sub

Но он слишком медленно работает - у меня порядка 25 000 строк sad

Автор - Ed_Vard
Дата добавления - 29.07.2011 в 09:25
Michael_S Дата: Пятница, 29.07.2011, 13:04 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Ed_Vard, так у Вас какой офис? и в каком нужно, что б работало?

И в конце концов Вам нужно получить что типа, как на Лист1?
К сообщению приложен файл: Ed_Vard.rar (29.8 Kb)


Сообщение отредактировал Michael_S - Пятница, 29.07.2011, 13:09
 
Ответить
СообщениеEd_Vard, так у Вас какой офис? и в каком нужно, что б работало?

И в конце концов Вам нужно получить что типа, как на Лист1?

Автор - Michael_S
Дата добавления - 29.07.2011 в 13:04
Ed_Vard Дата: Пятница, 29.07.2011, 13:53 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Цитата (Michael_S писал(а)):
Ed_Vard, так у Вас какой офис? и в каком нужно, что б работало?

Я вродебы написал постом выше -
Цитата (Ed_Vard писал(а)):
то у меня офис 2003

И нужно - чтобы работало в 2003 офисе
Типа - но не то - то что мне нужно - указано на листе сверка - только мне нужно - чтобы там небыло дубликатов! Этот лист будет использоваться для значений при расчете на другом листе.
 
Ответить
Сообщение
Цитата (Michael_S писал(а)):
Ed_Vard, так у Вас какой офис? и в каком нужно, что б работало?

Я вродебы написал постом выше -
Цитата (Ed_Vard писал(а)):
то у меня офис 2003

И нужно - чтобы работало в 2003 офисе
Типа - но не то - то что мне нужно - указано на листе сверка - только мне нужно - чтобы там небыло дубликатов! Этот лист будет использоваться для значений при расчете на другом листе.

Автор - Ed_Vard
Дата добавления - 29.07.2011 в 13:53
Hugo Дата: Суббота, 30.07.2011, 00:10 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3854
Репутация: 814 ±
Замечаний: 0% ±

365
Попробуйте - добавил словарь и одну переменную в код из файла Николая:
Option Explicit Sub с_листа_данные()        Dim x; z(); i As Long; ii&        Application.ScreenUpdating = False        With Sheets("данные")        'на РСВ            x = .Range("B5:R" & .Cells(Rows.Count; 2).End(xlUp).Row).Value        End With        ReDim z(1 To UBound(x); 1 To 16)        With CreateObject("Scripting.dictionary")            .CompareMode = 1    'TextCompare            For i = 1 To UBound(x)                If Not .exists(x(i; 1)) Then                    .Item(x(i; 1)) = CStr(i)                    ii = ii + 1                    z(ii; 1) = x(i; 2) & "-" & x(i; 10) & " " & x(i; 7)                    z(ii; 2) = x(i; 1)                    z(ii; 3) = x(i; 2)                    z(ii; 4) = x(i; 3)                    z(ii; 5) = x(i; 4)                    z(ii; 6) = x(i; 5)                    z(ii; 7) = x(i; 7)                    z(ii; 8) = x(i; 8)                    z(ii; 9) = x(i; 9)                    z(ii; 10) = x(i; 6)                    z(ii; 11) = x(i; 10)                    z(ii; 12) = x(i; 11) & " " & Left(x(i; 12); 1) & "." & Left(x(i; 13); 1) & "."                    z(ii; 13) = x(i; 14)                    z(ii; 14) = x(i; 15)                    z(ii; 15) = x(i; 16)                    z(ii; 16) = x(i; 17)                End If            Next i        End With        Range("A5:P" & Cells(Rows.Count; 1).End(xlUp).Row + 1).ClearContents        With [a5:p5].Resize(ii)            .Value = z        End With        Application.ScreenUpdating = Тrue End Sub


И никаких -1 тут не нужно - в массиве x все данные без пустых строк, а переменная ii образуется без Next.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеПопробуйте - добавил словарь и одну переменную в код из файла Николая:
Option Explicit Sub с_листа_данные()        Dim x; z(); i As Long; ii&        Application.ScreenUpdating = False        With Sheets("данные")        'на РСВ            x = .Range("B5:R" & .Cells(Rows.Count; 2).End(xlUp).Row).Value        End With        ReDim z(1 To UBound(x); 1 To 16)        With CreateObject("Scripting.dictionary")            .CompareMode = 1    'TextCompare            For i = 1 To UBound(x)                If Not .exists(x(i; 1)) Then                    .Item(x(i; 1)) = CStr(i)                    ii = ii + 1                    z(ii; 1) = x(i; 2) & "-" & x(i; 10) & " " & x(i; 7)                    z(ii; 2) = x(i; 1)                    z(ii; 3) = x(i; 2)                    z(ii; 4) = x(i; 3)                    z(ii; 5) = x(i; 4)                    z(ii; 6) = x(i; 5)                    z(ii; 7) = x(i; 7)                    z(ii; 8) = x(i; 8)                    z(ii; 9) = x(i; 9)                    z(ii; 10) = x(i; 6)                    z(ii; 11) = x(i; 10)                    z(ii; 12) = x(i; 11) & " " & Left(x(i; 12); 1) & "." & Left(x(i; 13); 1) & "."                    z(ii; 13) = x(i; 14)                    z(ii; 14) = x(i; 15)                    z(ii; 15) = x(i; 16)                    z(ii; 16) = x(i; 17)                End If            Next i        End With        Range("A5:P" & Cells(Rows.Count; 1).End(xlUp).Row + 1).ClearContents        With [a5:p5].Resize(ii)            .Value = z        End With        Application.ScreenUpdating = Тrue End Sub


И никаких -1 тут не нужно - в массиве x все данные без пустых строк, а переменная ii образуется без Next.

Автор - Hugo
Дата добавления - 30.07.2011 в 00:10
Ed_Vard Дата: Понедельник, 01.08.2011, 16:00 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Цитата (Hugo писал(а)):
Попробуйте - добавил словарь и одну переменную в код из файла Николая:

Спасибо большое за помощь - немножко не то - но натолкнуло на идею - как выйти из положения и решить вопрос!
 
Ответить
Сообщение
Цитата (Hugo писал(а)):
Попробуйте - добавил словарь и одну переменную в код из файла Николая:

Спасибо большое за помощь - немножко не то - но натолкнуло на идею - как выйти из положения и решить вопрос!

Автор - Ed_Vard
Дата добавления - 01.08.2011 в 16:00
  • Страница 1 из 1
  • 1
Поиск:

Рейтинг@Mail.ru Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!