.Match для 2 массивов - PullRequest
       1

.Match для 2 массивов

0 голосов
/ 13 ноября 2018

Моя общая цель - удалить все идентичные строки из листа.

Поэтому я создал два массива.Одним из них является «текущая строка» (1), а второй массив заполняется одной строкой за другой.Пока это работает.

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

Тогда «текущая строка» изменится на 2.

Мой код прямо сейчас:

For j = 1 To VarAnzahlZeilen
    i = 1
    For i = 1 To VarAnzahlSpalten
        ReDim Preserve ArrAktuelleZeile(i - 1) As String
        ArrAktuelleZeile(i - 1) = Worksheets("Filter").Cells(j, i).Value
    Next i

       (i+1)
        For n = j + 1 To VarAnzahlZeilen
            k = 1
                For k = 1 To VarAnzahlSpalten
                     ReDim Preserve ArrDurchlaufZeile(k) As String
                     ArrDurchlaufZeile(k - 1) = Worksheets("Filter").Cells(n, k).Value
                Next k

                    If Not IsError(WorksheetFunction.Match(ArrAktuelleZeile, ArrDurchlaufZeile, 0)) Then
                        Rows(n).Delete
                    End If
        Next n
Next j

RuntimeError 13 появляется в строке:

If Not IsError (WorksheetFunction.Match (ArrAktuelleZeile, ArrDurchlaufZeile, 0)) Тогда

Я думаю, что в целом код можно улучшить ^^

Можете ли вы помочь, пожалуйста?


Прежде всего, большое спасибо всем, ктопомогая.

Я попробовал идею @GTPV и немного изменил ее, чтобы она соответствовала моим потребностям (переменная Range и сравнение столбцов 1-30).К сожалению, синтаксическая ошибка появляется

 Worksheets("Filter").Range(.Cells(1, 1), .Cells(VarAnzahlZeilen, VarNutzerSpalte))).RemoveDuplicates Columns:=Array(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), Header _
    :=xlNo

1 Ответ

0 голосов
/ 13 ноября 2018

Одной из возможностей является использование встроенной функции из Excel, которая удаляет дубликаты:

 Worksheets("Filter").Range("$A$1:$C$10").RemoveDuplicates Columns:=Array(1, 3), Header _
    :=xlNo

В приведенном выше примере будут удалены все дубликаты в диапазоне A1: C10, где дубликат означает «одно и то же значение в столбце A И такое же значение в столбце C». Этот последний параметр контролируется аргументом «Columns: = Array (1,3)».

Получение только уникальных значений на основе одного столбца A будет кодироваться как:

 Worksheets("Filter").Range("$A$1:$C$10").RemoveDuplicates Columns:=Array(1), Header _
    :=xlNo

Получение уникальных значений на основе комбинации всех столбцов:

 Worksheets("Filter").Range("$A$1:$C$10").RemoveDuplicates Columns:=Array(1,2,3), Header _
    :=xlNo

Дополнительную справку по этой функции можно найти на сайте Microsoft.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...