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

Вход

Регистрация

Напомнить пароль

 

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

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Удаление дубликатов внутри массива
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.
Нужно что то другое для удаления дубликатов.
Я использовал вот такой макрос для удаления дубликатов найденый на планете:
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 строк sad


Сообщение отредактировал Ed_Vard - Пятница, 29.07.2011, 09:38
 
Ответить
Сообщение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 строк 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% ±

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

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

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

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

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

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

365
Попробуйте - добавил словарь и одну переменную в код из файла Николая:
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

           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 = True
End Sub


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


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеПопробуйте - добавил словарь и одну переменную в код из файла Николая:
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

           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 = True
End Sub


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

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

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

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

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

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

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