Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Office (Word, Excel, Outlook и т.д.) (http://forum.oszone.net/forumdisplay.php?f=115)
-   -   [решено] Помогите написать скрипт для Exel на VB (http://forum.oszone.net/showthread.php?t=302962)

Maestro 28-07-2015 00:05 2533191

Помогите написать скрипт для Exel на VB
 
Всем привет. Офис 2003
Требуется простая (для опытных) задача:

есть в Exel таблица, в которой в каждой строке (столбец только один единственный) данные одним словом.
Требуется написаить макрос на VB, который бы находил одинаковые данные и удалял их (повторяющиеся начиная со 2, 3 и т.д. повторения)
в итоге должен получится столбец с НЕ ПОВТОРЯЮЩИМИСЯ данными в каждой строке. Т.е. в идеале именно УДАЛЯЛ дублирующиеся строки.

+ дополнительно как можно программно сделать удаление всего, что идёт после пробела в строке
+ удалить вначале лишние пробелы если есть

Ну как-то так ))
Заранее признателен.
С меня пиво

okshef 28-07-2015 00:52 2533201

Код:

Sub DelRowDuble()
Dim a As Range
Dim b As Long
b = Cells(Rows.Count, 1).End(xlUp).Row
 For Each a In Range(Cells(1, 1), Cells(b, 1))
  a.Value=trim(a) ' убираем лишние пробелы
 Do While a <> "" And a = a.Offset(1, 0)
 a.Offset(1, 0).EntireRow.Delete
 Loop
 Next a
' убираем все после первого пробела
  Range(Cells(1, 1), Cells(b, 1)). _
    Replace What:=" *", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
End Sub

или
Код:

Sub DelRowDuble()
Dim i As Long
Dim b As Long
b = Cells(Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
For i = b To 2 Step -1
      a.Value=trim(a) ' убираем лишние пробелы
 If Cells(i, 1).Value = Cells(i - 1, 1).Value Then
 If Cells(i, 1).Value <> "" Then Rows(i).Delete
 End If
 Next i
' убираем все после первого пробела
  Range(Cells(1, 1), Cells(b, 1)). _
    Replace What:=" *", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
Application.ScreenUpdating = False
End Sub

Использованы решения из этой темы

Цитата:

Цитата Maestro
после пробела в строке
+ удалить вначале лишние пробелы если есть »

может наоборот? Сначала пробелы в начале строки, а затем все, что после пробела?

Maestro 28-07-2015 08:05 2533241

Цитата:

Цитата okshef
может наоборот? Сначала пробелы в начале строки, а затем все, что после пробела? »

Да-да, ТАКОЙ вариант в одном лице можно?
Т.е. удалить пробелы вначале, потом всё, что после пробела, а потом повторяющиеся строки удалить и в конце сортирануть столбец по алфавиту и я СЧАСТЛИВ ПОЛНОСТЬЮ :yahoo:

а по этим двум кодам я пробовал - что-то ничего не происходит. Что не так делаю? Где курсор должен быть ? И в начале столбца на первой строке пробовал ставить, и все данные в столбце пробовал выделять - тишина :help:

Iska 28-07-2015 11:30 2533290

Цитата:

Цитата Maestro
а по этим двум кодам я пробовал - что-то ничего не происходит. »

Там список должен быть предварительно отсортирован. Ну, и не по первому слову, а по значению ячейки целиком.

Maestro 29-07-2015 00:35 2533568

Цитата:

Цитата Iska
Там список должен быть предварительно отсортирован. Ну, и не по первому слову, а по значению ячейки целиком. »

а, т.е. надо сначала отсортировать,а потом? Выделить все данные или на первую ячейку стать и запустить макрос?


Все заработало, огромное спасибо. По поводу пробелов в начале и удалению всего после пробела можно ещё? и я в полном восторге буду

okshef 29-07-2015 01:37 2533582

Дописал обе программы в сообщении 2

Maestro 29-07-2015 16:53 2533852

Цитата:

Цитата okshef
Дописал обе программы в сообщении 2 »

чудеса. Получилось вот что:

в 1 коде убирает пробелы и после пробела, НО не убирает дубликаты

во 2 коде сразу ругается на строку
a.Value = Trim(a) ' убираем лишние пробелы

Вначале сортирую, потом становлюсь на первую ячейку и запускаю

заработало !!!


Время: 21:39.

Время: 21:39.
© OSzone.net 2001-