Удаление повторов

Программирование на Visual Basic for Applications
VohA
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 19.02.2004 (Чт) 13:44

Удаление повторов

Сообщение VohA » 05.08.2004 (Чт) 18:28

Вопрос у меня простой, и как-то давно здесь рассматривался, но в поиске я этой темы не нашёл, так что буду пытать вас. Нужно удалять строку, если число в певой колонке повторяется. Я написал код, но он удаляет только повторы следующие друг за другом:
Dim J, I As Integer
J = 1
Do Until IsEmpty(Cells(J, 1))
For I = 2 To 5000
If Sheets(1).Cells(I, 1).Value = Sheets(1).Cells(J, 1) Then Rows(I).Delete
J = J + 1
Next I
Loop
Помогите плз :roll:

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 05.08.2004 (Чт) 18:47

делай в убывающем порядке

и не пересекай
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

VohA
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 19.02.2004 (Чт) 13:44

Сообщение VohA » 05.08.2004 (Чт) 19:49

Про обратный порядок- понял, а вот про "не пересекай"- если можно поподробнее.

VohA
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 19.02.2004 (Чт) 13:44

Сообщение VohA » 05.08.2004 (Чт) 20:04

Попробовал в обратном (For i=5000 to 2), он у меня вообще из цикла не смог выйти, :(
Распишите пожалуйста поподробнее (очень надо).

Ernis
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 29.07.2004 (Чт) 17:17

Сообщение Ernis » 05.08.2004 (Чт) 21:14

Privet

Mozet tak pomozet

Dim J, I As Integer
J = 1
I = 2
Do Until IsEmpty(Cells(J, 1))
Do Until IsEmpty(Cells(I, 1))
If Sheets(1).Cells(I, 1).Value = Sheets(1).Cells(J, 1) Then Rows(I).Delete
I = I + 1
Loop
J = J + 1
I = J + 1
Loop

Jesly ja xorosho vas ponial?

Dobrovo dnia :wink:

VohA
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 19.02.2004 (Чт) 13:44

Сообщение VohA » 06.08.2004 (Пт) 11:25

2Ernis: не работает, прискорбно.
Господа, посоветуйте ещё чонидь, ГОРЮ, может использовать search или find :(
HELP

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 06.08.2004 (Пт) 12:04

For i=5000 to 2 Step -1
For y=i-1 to 1 step -1
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Ernis
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 29.07.2004 (Чт) 17:17

Сообщение Ernis » 06.08.2004 (Пт) 12:22

Tak aha tam bylo mnoju nedadumano

tak mozet tak:

Public Sub rrr()
Dim J, I As Integer
J = 1
I = 2
Do Until IsEmpty(Cells(J, 1))
Do Until IsEmpty(Cells(I, 1))
If Sheets(1).Cells(I, 1).Value = Sheets(1).Cells(J, 1) Then
'd = J
Rows(I).Delete
I = I - 1
End If
I = I + 1
Loop
'If d <> emty Then
'Rows(J).Delete
'I = J + 1
'd = Empty
'Else
J = J + 1
I = J + 1
'd = Empty
'End If
Loop
End Sub

Esli uberiosh remarki to takda udalyt vsio daze tu stroku skem ty sravnival. A tak to udalyt tolko vse zanim posledujeshyje stroki i astaviat pervoju stroku skem ty sravnival. :wink:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.08.2004 (Пт) 15:16

Код: Выделить всё
Sub sdfhs()
  Dim i As Long
 
  With Range("j1")
    .CurrentRegion.Sort .Cells(1)
    For i = .CurrentRegion.Rows.Count To 2 Step -1
      If Cells(i, 10).Value = Cells(i - 1, 10).Value Then Rows(i).Delete
    Next
  End With
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 86

    TopList