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

Вход

Регистрация

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

 

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

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Необходим макрос для удаления дубликатов
Black_Storm Дата: Понедельник, 03.03.2014, 15:49 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 55
Репутация: 1 ±
Замечаний: 100% ±

Excel 2007
Прошу прощения за оплошность, допущенную в первый раз.
Название темы переименовал. Раздел сменил. (Очень сложно по сайту ориентироваться, впервой в целом).
Добрый день всем!
Правила прочитал, поиском пользовался, в гугле не забанили. Везде искал - ничего толком не нашел.
Возможно (и скорее всего) проблема во мне - и я не понимаю, что смотрю, так как кодами пользоваться не умею.
В целом ситуация следующая: нужно написать макрос (код) и именно его, в котором удалялись бы дубликаты. Причем необходимо, чтобы удалялись ранние версии и всегда оставалась более поздняя.
Объясню ситуацию: есть большой массив и поставщики в него будут каждый день загружать информацию. В одной колонке номер договора, в другой статус. Статус может соответственно меняться и соответственно всегда более интересен последний. Поэтому нужно чтобы поздняя версия оставалась, а ранняя удалялась.
Для этого нужно прикрутить кнопку или автоматом как-то тоже будет работать?
Прикладываю примерный файл.
Буду безумно признателен!
Ах да, я не студент :) Пересмотрел кучу кодов, но я в них просто не разбираюсь...

По поводу файла - очень долго шел код активации, а гости не могут прикладывать документ. За сим тоже прошу прощения!
К сообщению приложен файл: 5290752.xls (24.0 Kb)


Сообщение отредактировал Black_Storm - Понедельник, 03.03.2014, 15:50
 
Ответить
СообщениеПрошу прощения за оплошность, допущенную в первый раз.
Название темы переименовал. Раздел сменил. (Очень сложно по сайту ориентироваться, впервой в целом).
Добрый день всем!
Правила прочитал, поиском пользовался, в гугле не забанили. Везде искал - ничего толком не нашел.
Возможно (и скорее всего) проблема во мне - и я не понимаю, что смотрю, так как кодами пользоваться не умею.
В целом ситуация следующая: нужно написать макрос (код) и именно его, в котором удалялись бы дубликаты. Причем необходимо, чтобы удалялись ранние версии и всегда оставалась более поздняя.
Объясню ситуацию: есть большой массив и поставщики в него будут каждый день загружать информацию. В одной колонке номер договора, в другой статус. Статус может соответственно меняться и соответственно всегда более интересен последний. Поэтому нужно чтобы поздняя версия оставалась, а ранняя удалялась.
Для этого нужно прикрутить кнопку или автоматом как-то тоже будет работать?
Прикладываю примерный файл.
Буду безумно признателен!
Ах да, я не студент :) Пересмотрел кучу кодов, но я в них просто не разбираюсь...

По поводу файла - очень долго шел код активации, а гости не могут прикладывать документ. За сим тоже прошу прощения!

Автор - Black_Storm
Дата добавления - 03.03.2014 в 15:49
igrtsk Дата: Понедельник, 03.03.2014, 15:58 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 314
Репутация: 50 ±
Замечаний: 0% ±

Excel 2016
Что-то в вашем примере не стыкуется с вашим пояснением.
Если столбец А - номер договора, а столбец D - статус, то совпадений нет. Нет ни одного повторяющегося номера договора с различными статусами. Или номер договора безразличен, а важен только номер статуса.
Или я вас не понял!?


Инструктор по применению лосей в кавалерийских частях РККА
 
Ответить
СообщениеЧто-то в вашем примере не стыкуется с вашим пояснением.
Если столбец А - номер договора, а столбец D - статус, то совпадений нет. Нет ни одного повторяющегося номера договора с различными статусами. Или номер договора безразличен, а важен только номер статуса.
Или я вас не понял!?

Автор - igrtsk
Дата добавления - 03.03.2014 в 15:58
Black_Storm Дата: Понедельник, 03.03.2014, 16:01 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 55
Репутация: 1 ±
Замечаний: 100% ±

Excel 2007
igrtsk, Номер Договора будет как раз в столбце D. До этого дата и прочая не интересная штука.
Ах да, возможно в примере не корректно прорисовал ячейки. Нужно чтобы удалялась вся строка...
Моя ошибка, признаю.


Сообщение отредактировал Black_Storm - Понедельник, 03.03.2014, 16:05
 
Ответить
Сообщениеigrtsk, Номер Договора будет как раз в столбце D. До этого дата и прочая не интересная штука.
Ах да, возможно в примере не корректно прорисовал ячейки. Нужно чтобы удалялась вся строка...
Моя ошибка, признаю.

Автор - Black_Storm
Дата добавления - 03.03.2014 в 16:01
nilem Дата: Понедельник, 03.03.2014, 19:07 | Сообщение № 4
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
например, так:
[vba]
Код
Sub ertert()
Dim x, i&
x = Range("A1:D" & Cells(Rows.Count, 1).End(xlUp).Row).Value
With CreateObject("Scripting.Dictionary")
     .CompareMode = 1
     For i = 1 To UBound(x)
         If .Exists(x(i, 4)) Then x(.Item(x(i, 4)), 1) = Empty
         .Item(x(i, 4)) = i
     Next i
End With
On Error Resume Next
With Range("A1", Cells(Rows.Count, 1).End(xlUp))
     .Value = x: .SpecialCells(4).EntireRow.Delete
End With
End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениенапример, так:
[vba]
Код
Sub ertert()
Dim x, i&
x = Range("A1:D" & Cells(Rows.Count, 1).End(xlUp).Row).Value
With CreateObject("Scripting.Dictionary")
     .CompareMode = 1
     For i = 1 To UBound(x)
         If .Exists(x(i, 4)) Then x(.Item(x(i, 4)), 1) = Empty
         .Item(x(i, 4)) = i
     Next i
End With
On Error Resume Next
With Range("A1", Cells(Rows.Count, 1).End(xlUp))
     .Value = x: .SpecialCells(4).EntireRow.Delete
End With
End Sub
[/vba]

Автор - nilem
Дата добавления - 03.03.2014 в 19:07
Black_Storm Дата: Вторник, 04.03.2014, 11:36 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 55
Репутация: 1 ±
Замечаний: 100% ±

Excel 2007
nilem, Огромное спасибо! Работает.
Сижу чешу репу, хочу усложнить себе задачу. Возможно додумаюсь сам, но и сюда кину свои мысли:
Хочу сделать, чтобы при обнаружении дубликатов выдавалось сообщение в message box и появлялись две кнопки - "Удалить" и "Оставить как есть" соответственно.
Ну и далее все понятно - если удалить - удалить и скрыть сообщение с кнопками, если оставить как есть - энд саб и скрытие соответственно.
 
Ответить
Сообщениеnilem, Огромное спасибо! Работает.
Сижу чешу репу, хочу усложнить себе задачу. Возможно додумаюсь сам, но и сюда кину свои мысли:
Хочу сделать, чтобы при обнаружении дубликатов выдавалось сообщение в message box и появлялись две кнопки - "Удалить" и "Оставить как есть" соответственно.
Ну и далее все понятно - если удалить - удалить и скрыть сообщение с кнопками, если оставить как есть - энд саб и скрытие соответственно.

Автор - Black_Storm
Дата добавления - 04.03.2014 в 11:36
Black_Storm Дата: Вторник, 04.03.2014, 12:06 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 55
Репутация: 1 ±
Замечаний: 100% ±

Excel 2007
Господа, рано я радовался.
Не могу понять в чем беда, привязав формулу к необходимому файлу.
К сожалению файл не могу приложить :(
В общем ситуация такая. По макросу указанному выше я так понимаю информация берется в диапазоне от А до Д, а в оригинале от A до Z, где А - п/п.
Сама таблица начинается с 5 строки.
Номер договора по прежнему находится в D.
Изменил формулу следующим образом:
[vba]
Код
Private Sub CommandButton1_Click()
Dim x, i&
x = Range("B5:Z" & Cells(Rows.Count, 1).End(xlUp).Row).Value
With CreateObject("Scripting.Dictionary")
.CompareMode = 1
For i = 1 To UBound(x)
If .Exists(x(i, 4)) Then x(.Item(x(i, 4)), 1) = Empty
.Item(x(i, 4)) = i
Next i
End With
On Error Resume Next
With Range("B5", Cells(Rows.Count, 1).End(xlUp))
.Value = x: .SpecialCells(4).EntireRow.Delete
End With
End Sub
[/vba]
Не могу понять почему при клике удаляется вся информация... :(

Строк может быть бесконечное множество в документе...
Буду признателен!


Сообщение отредактировал Black_Storm - Вторник, 04.03.2014, 12:10
 
Ответить
СообщениеГоспода, рано я радовался.
Не могу понять в чем беда, привязав формулу к необходимому файлу.
К сожалению файл не могу приложить :(
В общем ситуация такая. По макросу указанному выше я так понимаю информация берется в диапазоне от А до Д, а в оригинале от A до Z, где А - п/п.
Сама таблица начинается с 5 строки.
Номер договора по прежнему находится в D.
Изменил формулу следующим образом:
[vba]
Код
Private Sub CommandButton1_Click()
Dim x, i&
x = Range("B5:Z" & Cells(Rows.Count, 1).End(xlUp).Row).Value
With CreateObject("Scripting.Dictionary")
.CompareMode = 1
For i = 1 To UBound(x)
If .Exists(x(i, 4)) Then x(.Item(x(i, 4)), 1) = Empty
.Item(x(i, 4)) = i
Next i
End With
On Error Resume Next
With Range("B5", Cells(Rows.Count, 1).End(xlUp))
.Value = x: .SpecialCells(4).EntireRow.Delete
End With
End Sub
[/vba]
Не могу понять почему при клике удаляется вся информация... :(

Строк может быть бесконечное множество в документе...
Буду признателен!

Автор - Black_Storm
Дата добавления - 04.03.2014 в 12:06
nilem Дата: Вторник, 04.03.2014, 12:26 | Сообщение № 7
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
приложите кусочек (несколько строк) из вашего файла


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеприложите кусочек (несколько строк) из вашего файла

Автор - nilem
Дата добавления - 04.03.2014 в 12:26
Black_Storm Дата: Вторник, 04.03.2014, 12:29 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 55
Репутация: 1 ±
Замечаний: 100% ±

Excel 2007
nilem, Приложу целый файл.
В общем и целом по уже нормальному файлу - когда будет вбиваться две одинаковых строки с номером договора хочется оставить только последний нормальный. Ни с каким другим столбцом сравнивать необходимости нет. Повторяется - предыдущая не нужна.
Как-то так.
Огромное Вам спасибо!
К сообщению приложен файл: 2312352.xlsm (31.3 Kb)
 
Ответить
Сообщениеnilem, Приложу целый файл.
В общем и целом по уже нормальному файлу - когда будет вбиваться две одинаковых строки с номером договора хочется оставить только последний нормальный. Ни с каким другим столбцом сравнивать необходимости нет. Повторяется - предыдущая не нужна.
Как-то так.
Огромное Вам спасибо!

Автор - Black_Storm
Дата добавления - 04.03.2014 в 12:29
nilem Дата: Вторник, 04.03.2014, 12:55 | Сообщение № 9
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
вот так попробуйте:
[vba]
Код
Sub ertert()
Dim x, i&
With Range("D4", Cells(Rows.Count, 4).End(xlUp))
     x = .Value
     With CreateObject("Scripting.Dictionary")
         .CompareMode = 1
         For i = 1 To UBound(x)
             If .Exists(x(i, 1)) Then x(.Item(x(i, 1)), 1) = Empty
             .Item(x(i, 1)) = i
         Next i
     End With
     .Value = x
     On Error Resume Next
     If MsgBox("Удалить повторы?", 36) = vbYes Then .SpecialCells(4).EntireRow.Delete
End With
End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениевот так попробуйте:
[vba]
Код
Sub ertert()
Dim x, i&
With Range("D4", Cells(Rows.Count, 4).End(xlUp))
     x = .Value
     With CreateObject("Scripting.Dictionary")
         .CompareMode = 1
         For i = 1 To UBound(x)
             If .Exists(x(i, 1)) Then x(.Item(x(i, 1)), 1) = Empty
             .Item(x(i, 1)) = i
         Next i
     End With
     .Value = x
     On Error Resume Next
     If MsgBox("Удалить повторы?", 36) = vbYes Then .SpecialCells(4).EntireRow.Delete
End With
End Sub
[/vba]

Автор - nilem
Дата добавления - 04.03.2014 в 12:55
Black_Storm Дата: Вторник, 04.03.2014, 13:13 | Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 55
Репутация: 1 ±
Замечаний: 100% ±

Excel 2007
nilem, Не удаляет дубликаты на данный момент.
Если мсгбокс сложно реализовать - не нужно. Это, так сказать, фетиш.
Вы мне очень сильно помогаете! Безумно признателен!

Уже начинаю понимать этот язык)
вроде мсгбокс реализовать вообще не сложно.
Не могу понять почему не ищет дубликаты по Вашему коду...


Сообщение отредактировал Black_Storm - Вторник, 04.03.2014, 13:20
 
Ответить
Сообщениеnilem, Не удаляет дубликаты на данный момент.
Если мсгбокс сложно реализовать - не нужно. Это, так сказать, фетиш.
Вы мне очень сильно помогаете! Безумно признателен!

Уже начинаю понимать этот язык)
вроде мсгбокс реализовать вообще не сложно.
Не могу понять почему не ищет дубликаты по Вашему коду...

Автор - Black_Storm
Дата добавления - 04.03.2014 в 13:13
nilem Дата: Вторник, 04.03.2014, 13:26 | Сообщение № 11
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
попробуйте еще раз в файле

Если номера договоров - просто числа, то нужно подправить словарь. А если договоры как обычно (что-то вроде "СР25-456/45-2014"), то должно работать.
К сообщению приложен файл: 2312352-1.xlsm (30.1 Kb)


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Вторник, 04.03.2014, 13:29
 
Ответить
Сообщениепопробуйте еще раз в файле

Если номера договоров - просто числа, то нужно подправить словарь. А если договоры как обычно (что-то вроде "СР25-456/45-2014"), то должно работать.

Автор - nilem
Дата добавления - 04.03.2014 в 13:26
Black_Storm Дата: Вторник, 04.03.2014, 13:32 | Сообщение № 12
Группа: Пользователи
Ранг: Участник
Сообщений: 55
Репутация: 1 ±
Замечаний: 100% ±

Excel 2007
nilem, в файле все работает.
Договоры могут быть как числами, так и буквы+числа. Но в файле удаляет и просто числа.
Спасибо огромное!

Снова рано радовался :)
Не могу перенести к себе файл и почему-то иногда не удаляет.
В чем причина не могу понять. Сломал голову уже...


Сообщение отредактировал Black_Storm - Вторник, 04.03.2014, 14:33
 
Ответить
Сообщениеnilem, в файле все работает.
Договоры могут быть как числами, так и буквы+числа. Но в файле удаляет и просто числа.
Спасибо огромное!

Снова рано радовался :)
Не могу перенести к себе файл и почему-то иногда не удаляет.
В чем причина не могу понять. Сломал голову уже...

Автор - Black_Storm
Дата добавления - 04.03.2014 в 13:32
Black_Storm Дата: Вторник, 04.03.2014, 14:49 | Сообщение № 13
Группа: Пользователи
Ранг: Участник
Сообщений: 55
Репутация: 1 ±
Замечаний: 100% ±

Excel 2007
[vba]
Код
Private Sub CommandButton1_Click()
Dim x, i&
With Range("D5", Cells(Rows.Count, 5).End(xlUp))
x = .Value
With CreateObject("Scripting.Dictionary")
.CompareMode = 1
For i = 1 To UBound(x)
If .Exists(x(i, 1)) Then x(.Item(x(i, 1)), 1) = Empty
.Item(x(i, 1)) = i
Next i
End With
On Error Resume Next
If MsgBox("Удалить повторы?", 36) = vbYes Then .Value = x: .SpecialCells(5).EntireRow.Delete
End With
End Sub
[/vba]

Мне кажется ошибка в
[vba]
Код
With Range("D5", Cells(Rows.Count, 4).End(xlUp))
[/vba]
этой строке...
Но я особо не разбираюсь во всем этом...(


Сообщение отредактировал Serge_007 - Вторник, 04.03.2014, 22:51
 
Ответить
Сообщение[vba]
Код
Private Sub CommandButton1_Click()
Dim x, i&
With Range("D5", Cells(Rows.Count, 5).End(xlUp))
x = .Value
With CreateObject("Scripting.Dictionary")
.CompareMode = 1
For i = 1 To UBound(x)
If .Exists(x(i, 1)) Then x(.Item(x(i, 1)), 1) = Empty
.Item(x(i, 1)) = i
Next i
End With
On Error Resume Next
If MsgBox("Удалить повторы?", 36) = vbYes Then .Value = x: .SpecialCells(5).EntireRow.Delete
End With
End Sub
[/vba]

Мне кажется ошибка в
[vba]
Код
With Range("D5", Cells(Rows.Count, 4).End(xlUp))
[/vba]
этой строке...
Но я особо не разбираюсь во всем этом...(

Автор - Black_Storm
Дата добавления - 04.03.2014 в 14:49
nilem Дата: Вторник, 04.03.2014, 16:52 | Сообщение № 14
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
With Range("D5", Cells(Rows.Count, 5).End(xlUp))

[vba]
Код
With Range("D5", Cells(Rows.Count, 4).End(xlUp))
[/vba]
д.б. 4 вместо 5, столбец Д - это 4-й по порядку
ну или пришлите мне на почту свой реальный файл


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение
With Range("D5", Cells(Rows.Count, 5).End(xlUp))

[vba]
Код
With Range("D5", Cells(Rows.Count, 4).End(xlUp))
[/vba]
д.б. 4 вместо 5, столбец Д - это 4-й по порядку
ну или пришлите мне на почту свой реальный файл

Автор - nilem
Дата добавления - 04.03.2014 в 16:52
Black_Storm Дата: Вторник, 04.03.2014, 17:14 | Сообщение № 15
Группа: Пользователи
Ранг: Участник
Сообщений: 55
Репутация: 1 ±
Замечаний: 100% ±

Excel 2007
nilem, У Вас скрыт адрес электронной почты. Готов отправить.
 
Ответить
Сообщениеnilem, У Вас скрыт адрес электронной почты. Готов отправить.

Автор - Black_Storm
Дата добавления - 04.03.2014 в 17:14
nilem Дата: Вторник, 04.03.2014, 19:54 | Сообщение № 16
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
написал в личку


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениенаписал в личку

Автор - nilem
Дата добавления - 04.03.2014 в 19:54
Black_Storm Дата: Вторник, 04.03.2014, 20:07 | Сообщение № 17
Группа: Пользователи
Ранг: Участник
Сообщений: 55
Репутация: 1 ±
Замечаний: 100% ±

Excel 2007
nilem, сейчас отправлю.
 
Ответить
Сообщениеnilem, сейчас отправлю.

Автор - Black_Storm
Дата добавления - 04.03.2014 в 20:07
nilem Дата: Вторник, 04.03.2014, 22:44 | Сообщение № 18
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
вот такой получился код:
[vba]
Код
Sub ertert()
Dim x, i&
With Application
     .ScreenUpdating = False: .Calculation = xlCalculationManual
End With
With ActiveSheet
     If .FilterMode Then .ShowAllData
     x = .Range("E3", .Cells(Rows.Count, 5).End(xlUp)).Value
End With
With CreateObject("Scripting.Dictionary")
     .CompareMode = 1
     For i = 1 To UBound(x)
         If .Exists(CStr(x(i, 1))) Then x(.Item(CStr(x(i, 1))), 1) = Empty
         .Item(CStr(x(i, 1))) = i
     Next i
End With
On Error Resume Next
If MsgBox("Óäàëèòü ïîâòîðû?", 36) = vbYes Then
     With Range("E3", Cells(Rows.Count, 5).End(xlUp))
         .Value = x
         .SpecialCells(4).EntireRow.Delete
         .Offset(1, -4).Value = Evaluate("=row(" & .Address & ")-2")
     End With
End If
With Application
     .ScreenUpdating = True: .Calculation = xlCalculationAutomatic
End With
End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениевот такой получился код:
[vba]
Код
Sub ertert()
Dim x, i&
With Application
     .ScreenUpdating = False: .Calculation = xlCalculationManual
End With
With ActiveSheet
     If .FilterMode Then .ShowAllData
     x = .Range("E3", .Cells(Rows.Count, 5).End(xlUp)).Value
End With
With CreateObject("Scripting.Dictionary")
     .CompareMode = 1
     For i = 1 To UBound(x)
         If .Exists(CStr(x(i, 1))) Then x(.Item(CStr(x(i, 1))), 1) = Empty
         .Item(CStr(x(i, 1))) = i
     Next i
End With
On Error Resume Next
If MsgBox("Óäàëèòü ïîâòîðû?", 36) = vbYes Then
     With Range("E3", Cells(Rows.Count, 5).End(xlUp))
         .Value = x
         .SpecialCells(4).EntireRow.Delete
         .Offset(1, -4).Value = Evaluate("=row(" & .Address & ")-2")
     End With
End If
With Application
     .ScreenUpdating = True: .Calculation = xlCalculationAutomatic
End With
End Sub
[/vba]

Автор - nilem
Дата добавления - 04.03.2014 в 22:44
Black_Storm Дата: Среда, 05.03.2014, 10:43 | Сообщение № 19
Группа: Пользователи
Ранг: Участник
Сообщений: 55
Репутация: 1 ±
Замечаний: 100% ±

Excel 2007
Еще раз всем привет!
В коде выше все начинается с третьей строки, в моем файле с 5-ой.
Изменил значение Е3 на Е5 везде и строку
.Offset(1, -4).Value = Evaluate("=row(" & .Address & ")-2")
на
.Offset(1, -4).Value = Evaluate("=row(" & .Address & ")-4")
Однако, нумерация в первой колонке начинается теперь с 4.
Вместо -4 перепробовал все значение от 0 до -6 - результата нуль :(
Логикой понимаю, что с -4 должно работать, на практике не пониманию почему не работает...
 
Ответить
СообщениеЕще раз всем привет!
В коде выше все начинается с третьей строки, в моем файле с 5-ой.
Изменил значение Е3 на Е5 везде и строку
.Offset(1, -4).Value = Evaluate("=row(" & .Address & ")-2")
на
.Offset(1, -4).Value = Evaluate("=row(" & .Address & ")-4")
Однако, нумерация в первой колонке начинается теперь с 4.
Вместо -4 перепробовал все значение от 0 до -6 - результата нуль :(
Логикой понимаю, что с -4 должно работать, на практике не пониманию почему не работает...

Автор - Black_Storm
Дата добавления - 05.03.2014 в 10:43
nilem Дата: Среда, 05.03.2014, 11:36 | Сообщение № 20
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
наверное, что-то пропустили. Вот полный код для случая, если начало в 5-й строке (5-я строка - заголовки)
[vba]
Код
Sub ertert()
Dim x, i&
With Application
     .ScreenUpdating = False: .Calculation = xlCalculationManual
End With
With ActiveSheet
     If .FilterMode Then .ShowAllData
     x = .Range("E5", .Cells(Rows.Count, 5).End(xlUp)).Value
End With
With CreateObject("Scripting.Dictionary")
     .CompareMode = 1
     For i = 1 To UBound(x)
         If .Exists(CStr(x(i, 1))) Then x(.Item(CStr(x(i, 1))), 1) = Empty
         .Item(CStr(x(i, 1))) = i
     Next i
End With
On Error Resume Next
If MsgBox("Удалить повторы?", 36) = vbYes Then
     With Range("E5", Cells(Rows.Count, 5).End(xlUp))
         .Value = x
         .SpecialCells(4).EntireRow.Delete
         .Offset(1, -4).Value = Evaluate("=row(" & .Address & ")-4")
     End With
End If
With Application
     .ScreenUpdating = True: .Calculation = xlCalculationAutomatic
End With
End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениенаверное, что-то пропустили. Вот полный код для случая, если начало в 5-й строке (5-я строка - заголовки)
[vba]
Код
Sub ertert()
Dim x, i&
With Application
     .ScreenUpdating = False: .Calculation = xlCalculationManual
End With
With ActiveSheet
     If .FilterMode Then .ShowAllData
     x = .Range("E5", .Cells(Rows.Count, 5).End(xlUp)).Value
End With
With CreateObject("Scripting.Dictionary")
     .CompareMode = 1
     For i = 1 To UBound(x)
         If .Exists(CStr(x(i, 1))) Then x(.Item(CStr(x(i, 1))), 1) = Empty
         .Item(CStr(x(i, 1))) = i
     Next i
End With
On Error Resume Next
If MsgBox("Удалить повторы?", 36) = vbYes Then
     With Range("E5", Cells(Rows.Count, 5).End(xlUp))
         .Value = x
         .SpecialCells(4).EntireRow.Delete
         .Offset(1, -4).Value = Evaluate("=row(" & .Address & ")-4")
     End With
End If
With Application
     .ScreenUpdating = True: .Calculation = xlCalculationAutomatic
End With
End Sub
[/vba]

Автор - nilem
Дата добавления - 05.03.2014 в 11:36
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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