Доброго времени суток уважаемые форумчане! Прошу помощи! В макросе переношу данные с одного листа книги в другой - но строки содержат дубликаты, которые необходимо удалить. Но дело в том - что уникальное значение для отлова дубликата появляться только путем склеивания нескольких ячеек пири вставке на лист из массива! Возможно ли отловить эти дуликаты внутри массива - до вставки на лист?
Доброго времени суток уважаемые форумчане! Прошу помощи! В макросе переношу данные с одного листа книги в другой - но строки содержат дубликаты, которые необходимо удалить. Но дело в том - что уникальное значение для отлова дубликата появляться только путем склеивания нескольких ячеек пири вставке на лист из массива! Возможно ли отловить эти дуликаты внутри массива - до вставки на лист?Ed_Vard
Опс - да прошу прощения - торопился - забыл пример прицепить Данные беруться с листа "данные" и переносться на лист "Сверка" На листе данные создать уникальные значения не получаеться - т.к. там идет импорт из xml-файлов - и как то непонятно там все делаеться Так вот - нужно удалить дубликаты перед вставкой на лист "сверка" Что-то с памятью совсем что-то стало. Уникальное значение формируеться в столбце А - и именно по этому столбцу нужно выбрать дубликаты и удалить - остави только одно.
Опс - да прошу прощения - торопился - забыл пример прицепить Данные беруться с листа "данные" и переносться на лист "Сверка" На листе данные создать уникальные значения не получаеться - т.к. там идет импорт из xml-файлов - и как то непонятно там все делаеться Так вот - нужно удалить дубликаты перед вставкой на лист "сверка" Что-то с памятью совсем что-то стало. Уникальное значение формируеться в столбце А - и именно по этому столбцу нужно выбрать дубликаты и удалить - остави только одно.Ed_Vard
Добавил удаление дубликатов по 1-му столбцу (у Вас ведь 2007?). Убрал -1 в For i = 1 To UBound(x), т.е. проходим до конца (до верхней границы) массива х. Добавил -1 в With [a5:p5].Resize(i - 1), т.к. последний Next i дает на единицу больше, чем верхняя граница массива х.
Добавил удаление дубликатов по 1-му столбцу (у Вас ведь 2007?). Убрал -1 в For i = 1 To UBound(x), т.е. проходим до конца (до верхней границы) массива х. Добавил -1 в With [a5:p5].Resize(i - 1), т.к. последний Next i дает на единицу больше, чем верхняя граница массива х. nilem
nilem, Спасибо за помощь. Но нет - в связи с тем - что используемый метод импорта xml не поддерживаеться в офисе 2007-2010 - то у меня офис 2003 - в котором данный метод удаления дубликатов не получаеться - я думал над ним! Если Вы откроете мой файл в 2003 офисе - то увидите - что на листе данные выделена граница импортируемых данных - и там в конце присутствует пустая строка - поэтому нужно использовать -1. Нужно что то другое для удаления дубликатов. Я использовал вот такой макрос для удаления дубликатов найденый на планете:
Code
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 строк
nilem, Спасибо за помощь. Но нет - в связи с тем - что используемый метод импорта xml не поддерживаеться в офисе 2007-2010 - то у меня офис 2003 - в котором данный метод удаления дубликатов не получаеться - я думал над ним! Если Вы откроете мой файл в 2003 офисе - то увидите - что на листе данные выделена граница импортируемых данных - и там в конце присутствует пустая строка - поэтому нужно использовать -1. Нужно что то другое для удаления дубликатов. Я использовал вот такой макрос для удаления дубликатов найденый на планете:
Code
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 строк Ed_Vard
Сообщение отредактировал Ed_Vard - Пятница, 29.07.2011, 09:38
Ed_Vard, так у Вас какой офис? и в каком нужно, что б работало?
Я вродебы написал постом выше -
Quote (Ed_Vard)
то у меня офис 2003
И нужно - чтобы работало в 2003 офисе Типа - но не то - то что мне нужно - указано на листе сверка - только мне нужно - чтобы там небыло дубликатов! Этот лист будет использоваться для значений при расчете на другом листе.
Quote (Michael_S)
Ed_Vard, так у Вас какой офис? и в каком нужно, что б работало?
Я вродебы написал постом выше -
Quote (Ed_Vard)
то у меня офис 2003
И нужно - чтобы работало в 2003 офисе Типа - но не то - то что мне нужно - указано на листе сверка - только мне нужно - чтобы там небыло дубликатов! Этот лист будет использоваться для значений при расчете на другом листе.Ed_Vard
Попробуйте - добавил словарь и одну переменную в код из файла Николая:
Code
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
Range("A5:P" & Cells(Rows.Count, 1).End(xlUp).Row + 1).ClearContents With [a5:p5].Resize(ii) .Value = z End With Application.ScreenUpdating = True End Sub
И никаких -1 тут не нужно - в массиве x все данные без пустых строк, а переменная ii образуется без Next.
Попробуйте - добавил словарь и одну переменную в код из файла Николая:
Code
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
Range("A5:P" & Cells(Rows.Count, 1).End(xlUp).Row + 1).ClearContents With [a5:p5].Resize(ii) .Value = z End With Application.ScreenUpdating = True End Sub
И никаких -1 тут не нужно - в массиве x все данные без пустых строк, а переменная ii образуется без Next.Hugo