powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA-(EXCEL)-Макрос
10 сообщений из 10, страница 1 из 1
VBA-(EXCEL)-Макрос
    #33279238
Фотография OreL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Возникла проблема по удалению строк дубликатов.
Есть таблица:

Название размершуруп 10х10шуруп 10х15шуруп 10х25шуруп 10х10шуруп 15х16болт 10х13х14болт 10х13х25болт 10х13х19болт 10х13х11болт 10х13х33болт 10х13х14болт 10х13х25гайка 10х10гайка 15х50гайка 10х30гайка 11х15гайка 12х32гайка 10х30

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

Есть макрос который просто ищет и показывает колличество
дубликатов, но только по одному столбцу(размер)-это не подходит т.к.
размер может быть одинаковый как у гайки так и у шурупа:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub CountDifference()
With Me.UsedRange.Columns( 2 )

     iCountA = Application.CountA(.Cells)
     For Each iCell In .Cells
         iCount = iCountA - .Cells.ColumnDifferences(iCell).Count
         
      If iCount >  1  Then
      
      MsgBox iCell.Value & "-" & iCount, , ""
         
     End If
      
     Next
        
End With

End Sub

Помогите пожалуста выйти из ситуации !
Спасибо.
...
Рейтинг: 0 / 0
VBA-(EXCEL)-Макрос
    #33279529
Надеюсь разберешься.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
    Dim rng As Range
    Dim arr( 1  To  18 ,  1  To  2 ) As Variant
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim bln As Boolean
    
    i =  1 
    
    For j =  2  To  19 
        Set rng = ThisWorkbook.Worksheets("Лист1").Range("A" & j)
        bln = False
        If i =  1  Then
            bln = False
        Else
            For k = LBound(arr,  1 ) To UBound(arr,  1 )
                If Not IsEmpty(arr(k,  1 )) _
                  And Not IsEmpty(arr(k,  2 )) Then
                    If arr(k,  1 ) = rng.Value _
                      And arr(k,  2 ) = rng.Offset( 0 ,  1 ).Value Then
                        rng.EntireRow.Delete Shift:=xlUp
                        j = j -  1 
                        bln = True
                        Exit For
                    End If
                End If
            Next k
        End If
        If Not bln Then
            arr(i,  1 ) = rng.Value
            arr(i,  2 ) = rng.Offset( 0 ,  1 ).Value
            i = i +  1 
        End If
    Next j
...
Рейтинг: 0 / 0
VBA-(EXCEL)-Макрос
    #33280359
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а можно попробовать удалить запросом
...
Рейтинг: 0 / 0
VBA-(EXCEL)-Макрос
    #33280421
Toking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автора можно попробовать удалить запросом

Если нет идентификатора строки, то вряд ли ... разве что в цикле
...
Рейтинг: 0 / 0
VBA-(EXCEL)-Макрос
    #33280461
Можно еще проще. Загнать в аксекс, сделать запрос с группировкой и экпортнуть обратно в Excel.
...
Рейтинг: 0 / 0
VBA-(EXCEL)-Макрос
    #33280764
Фотография 100g
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OreL...но только по одному столбцу...
Онже может работать и по нескольким. Есть такой финт. Запиши в третьем столбце сумму, т.е. сцепку из первого и второго. Например в ячейке С2 напиши =СЦЕПИТЬ(A2;B2) и запускай макрос по нему.

По сабжу: А сортировать записи можно или у них строгий порядок?
...
Рейтинг: 0 / 0
VBA-(EXCEL)-Макрос
    #33280830
Фотография OreL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
100g OreL...но только по одному столбцу...
Онже может работать и по нескольким. Есть такой финт. Запиши в третьем столбце сумму, т.е. сцепку из первого и второго. Например в ячейке С2 напиши =СЦЕПИТЬ(A2;B2) и запускай макрос по нему.

По сабжу: А сортировать записи можно или у них строгий порядок?

Вариант со сцепкой понятен, причём очень даже не плохой вариант.

авторА сортировать записи можно или у них строгий порядок?

Что Вы этим имели ввиду ???
...
Рейтинг: 0 / 0
VBA-(EXCEL)-Макрос
    #33280834
Фотография OreL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь2Надеюсь разберешься.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
    Dim rng As Range
    Dim arr( 1  To  18 ,  1  To  2 ) As Variant
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim bln As Boolean
    
    i =  1 
    
    For j =  2  To  19 
        Set rng = ThisWorkbook.Worksheets("Лист1").Range("A" & j)
        bln = False
        If i =  1  Then
            bln = False
        Else
            For k = LBound(arr,  1 ) To UBound(arr,  1 )
                If Not IsEmpty(arr(k,  1 )) _
                  And Not IsEmpty(arr(k,  2 )) Then
                    If arr(k,  1 ) = rng.Value _
                      And arr(k,  2 ) = rng.Offset( 0 ,  1 ).Value Then
                        rng.EntireRow.Delete Shift:=xlUp
                        j = j -  1 
                        bln = True
                        Exit For
                    End If
                End If
            Next k
        End If
        If Not bln Then
            arr(i,  1 ) = rng.Value
            arr(i,  2 ) = rng.Offset( 0 ,  1 ).Value
            i = i +  1 
        End If
    Next j



Пока не очень понятно как это всё работает !!!
Пытаюсь разобраться !!!
...
Рейтинг: 0 / 0
VBA-(EXCEL)-Макрос
    #33280843
Фотография OreL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь2Можно еще проще. Загнать в аксекс, сделать запрос с группировкой и экпортнуть обратно в Excel.

1. Это затрата времени.
2. Будут проблеммы с форматом полей т.к. их 10, а в примере я только два привёл!
...
Рейтинг: 0 / 0
VBA-(EXCEL)-Макрос
    #33280853
OreL1. Это затрата времени.
2. Будут проблеммы с форматом полей т.к. их 10, а в примере я только два привёл!
Ок.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA-(EXCEL)-Макрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]