Удалить повторяющиеся значения и ячейки из одного столбца - PullRequest
0 голосов
/ 04 июня 2018

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

У меня есть один список значений, которые я перетаскиваю с другого листа (примерно до 80 тыс. Строк)в камеру B13 вниз.Затем я пытаюсь удалить дублирующиеся значения и ячейки, чтобы у меня остались уникальные значения, которые я затем могу использовать для поиска на других листах.

Sub Address_Sage()

    Dim dataBook As Workbook
    Dim dict As Object
    Dim Sage_Data As Worksheet, Address As Worksheet
    Dim dataSource As Range, dataDest As Range
    Dim sourceDataRowCount As Integer, index As Integer
    Dim rowCount As Long
    Dim strVal As String

    Set dataBook = Application.ThisWorkbook
    Set sheetSource = dataBook.Sheets("Sage_Data")
    Set sheetDest = dataBook.Sheets("Address")
    Set dict = CreateObject("Scripting.Dictionary")

    Set dataSource = sheetSource.Range("A3", _
                    sheetSource.Range("A90000").End(xlUp))
    sourceDataRowCount = dataSource.Rows.Count

    Set dataDest = sheetDest.Range("B13", "B" & _
                                sourceDataRowCount)

    For index = 1 To sourceDataRowCount
      dataDest(index, 1).Value = dataSource(index, 1).Value
    Next index

    Sheets("Address").Select

    rowCount = ActiveSheet.Range("B13").CurrentRegion.Rows.Count

    Do While rowCount > 0
      strVal = Address.Cells(rowCount, 1).Value2

      If dict.exists(strVal) Then
        ActiveSheet.Rows(rowCount).EntireRow.Delete
      Else
        dict.Add strVal, 0
      End If

      rowCount = rowCount - 1
    Loop
    'Set dict = Nothing

End Sub

Он всегда застревает на строке strVal.Я попытался изменить value2 на value1, так как у меня есть только столбец, но не повезло.

спасибо

1 Ответ

0 голосов
/ 04 июня 2018

Не очень опытен в VBA, поэтому я не могу точно сказать, что вы делаете и о чем говорит ваш код, но я решил поделиться этим с вами.На прошлой неделе я должен был создать макробук, который возвращает уникальные записи электрических дефектов, которые наблюдали разные команды во время работы.Я сделал словарь, который прочитал все записи в электронной таблице, а затем распечатал все уникальные записи.Я опубликую код и постараюсь показать вам его.

If .Range("A" & i) <> "" Then
    If dict.Exists(data) Then
        dict(data) = dict(data) + 1
    Else
        dict.Add Key:=Data, Item:="1"
    End If
End If

Таким образом, код в основном говорит, что если столбец A (я просто инкрементатор) не пустой, то мы будем читатьзаписи столбца А. Данные - это просто переменная, и вы должны установить ее равной диапазону значений, которые вы хотите прочитать в словаре.Очевидно, что словарные ключи уникальны и не могут повторяться, поэтому код спрашивает, существует ли ключ в словаре.Если так, мы добавим один к его количеству или значению.И если нет, мы добавим этот ключ в словарь.В конце цикла в вашем словаре будут храниться все уникальные записи и количество их появления.

Теперь мы можем ссылаться на них или печатать их.

For r = 0 To dict.Count
    Sheets("Results").Range("B" & iResults) = dict.Keys(r)
    Sheets("Results").Range("C" & iResults) = dict(dict.Keys(r))
Next 

Этот второй фрагменткода представляет собой цикл от 0 до количества записей в вашем словаре.Он начинается с нуля, потому что словарь хранится как массив, а массивы VBA - это базовый ноль.Первый оператор будет печатать уникальные ключи для каждого r, пока в словаре не останется больше записей.Второе утверждение напечатает значение или элементы, связанные с ними.Это будет целочисленное значение, равное числу раз, которое уникальная запись была обнаружена в ваших данных.

Этот же метод можно использовать и для других целей, не только для печати данных, но и для ссылки на них и их использования.где-нибудь еще.Но я уверен, что вы обнаружите, что цикл For с dict.Keys (r) - это самый простой способ просмотреть записи в словаре.Мне потребовалось несколько дней, чтобы понять это, и это произвело революцию в моей программе.Надеюсь, это поможет вам.

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