2016-01-04 3 views
-1

Я довольно новичок в VBA и могу сделать с небольшой помощью. Я посмотрел онлайн, и я нашел несколько фрагментов кода, но не смог внести изменения в мои потребности.Удаление дубликатов в excel с использованием VBA

Я пытаюсь создать макрос, который позволит мне увидеть, если они представляют собой дубликат текста между столбцами A и B, и если текст в столбце A соответствует столбцу B, нам нужно будет удалить всю строку. Столбцы находятся на одном листе

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

Я был бы признателен за любую помощь

Спасибо

+2

Нужно ли быть VBA? Вы можете просто использовать функцию COUNTIF для поиска дубликатов, возвращая более 1 для любых дублированных записей. Вы хотите удалить обе строки или только одну (в случае двух строк, 1 дубликат)? – GavinP

+0

Да, к сожалению, это должно быть сделано в vba, поскольку оно является частью гораздо большего Макро. Если данные совпадают с столбцами a и B, я бы предпочел удалить весь столбец с помощью EntireRow.Delete – MCharm88

+0

Если вы используете VBA, класс 'Scripting.Dictionary' должен вам очень помочь. Я бы рекомендовал вам прочитать об этом, попробовать свои силы в каком-то коде, а затем опубликовать свой код, если вы столкнетесь с конкретными проблемами. – Hambone

ответ

0

Привет попробовать в вашем коде VBA:

Sub DeleteRowWithContents() 
'======================================================================== 
' DELETES ALL ROWS FROM A2 DOWNWARDS WITH THE WORDs "Record Only" IN COLUMN D 
'======================================================================== 
    Last = Cells(Rows.Count, "D").End(xlUp).Row 
    For i = Last To 1 Step -1 
     If (Cells(i, "D").Value) = "Record Only" Then 
    'Cells(i, "A").EntireRow.ClearContents ' USE THIS TO CLEAR CONTENTS BUT NOT DELETE ROW 
      Cells(i, "A").EntireRow.Delete 
     End If 
    Next i 
End Sub 

вы можете обновите этот код для своей проблемы! Я использую это, когда мне нужно удалить все строки из a2 вниз словами «записывать только» в столбце d.

+0

Спасибо rdn87, если слова динамичны и меняются каждый раз. как бы обойти эту проблему? – MCharm88

+0

@ MCharm88 Я бы попытался заменить все экземпляры '" D "' на '" B "', а затем также изменить '' Record Only ''на' Cells (i, «A»). Value'. Это позволит коду получить последнюю использованную строку в столбце B, а затем сравнить записи столбца B с записями столбца A перед удалением. – NinjaLlama

+0

@NinjaLlama Спасибо за ответ, у меня, кажется, ошибка несоответствия для строки «If (Cells (i,« B »). Value) = Cells (i,« A »). Value Then». Есть ли другой путь вокруг этого – MCharm88

0

Может попробовать это:

Sub DeleteRowWithContents() 
    Dim ColumnAValue As String 
    Dim ColumnBValue As String 
    Dim xlWB As Worksheet 

    Set xlWB = ActiveWorkbook.ActiveSheet 'If it isn't the active sheet use second row: 
    'Set xlWB = ActiveWorkbook.Sheets("NameOfSheet") 'Change to the name of your sheet 

    For i = 1 To EOF 'This goes through the whole document to the last row automatically, EOF means "End Of File" 
     ColumnAValue = xlWB.Cells(i, 1).Value 'row i, column "a" 
     ColumnBValue = xlWB.Cells(i, 2).Value 'row i, column "b" 
     If (ColumnAValue = ColumnBValue) Then 
      xlWB.Range(ColumnAValue).Select 
      Selection.EntireRow.Delete 'NOTE!! 
     End If 
    Next i 
End Sub 

Примечание: Я не слишком уверен, если это работает, не может проверить это прямо сейчас. ЕСЛИ это не так, попробуйте это вместо:

EntireRow.Select 
Selection.Delete 
Смежные вопросы