SAS888
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Для решения данной задачи, работать с ячейками (строками) рабочего листа непосредственно - это очень медленно. С использованием массивов, все гораздо быстрее. Например, так: Код: Sub Main() Dim i As Long, j As Long, bi As Long, ci As Long, temp As String Dim x As New Collection, a(), b(), c() Application.ScreenUpdating = False: a = ActiveSheet.UsedRange.Value bi = 0: ci = 0: ReDim b(1 To UBound(a, 1), 1 To UBound(a, 2)): c = b For i = 1 To UBound(a, 1) temp = a(i, 5) & a(i, 6) & a(i, 7) & a(i, 8) On Error Resume Next: x.Add temp, temp If Err = 0 Then bi = bi + 1 For j = 1 To UBound(a, 2): b(bi, j) = a(i, j): Next Else ci = ci + 1 For j = 1 To UBound(a, 2): c(ci, j) = a(i, j): Next On Error GoTo 0 End If Next With ThisWorkbook.ActiveSheet .UsedRange.Value = c: Workbooks.Add xlWBATWorksheet .Range(.[A1], .Cells(1, UBound(a, 2))).Copy [A1].PasteSpecial Paste:=xlPasteColumnWidths End With ActiveSheet.Name = "Уникальные": [A1].Resize(UBound(a, 1), UBound(a, 2)).Value = b [A1].Select: Set x = Nothing: Application.CutCopyMode = False: Application.ScreenUpdating = True End Sub | Пример здесь. Откройте файл и запустите макрос "Main". Созданный макросом файл не сохраняется. Если нужно - добавьте это в код. P.S. Подразумевается, что количество используемых столбцов не менее 8. Иначе Ваше сравнение не будет иметь смысла. | Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 11:37 19-09-2011 | Исправлено: SAS888, 11:47 19-09-2011 |
|