Excel VBA Удалить пустую строку после создания уникального списка из диапазона таблицы - PullRequest
0 голосов
/ 03 октября 2019

Я изменил код из вопроса, который кто-то задавал здесь ( Создать новый столбец без дубликатов VBA? ), который создает уникальный список значений и копирует его в другое место.

В моем случае я извлекаю значения из столбца F (таблица A) и помещаю уникальные значения в столбец G (таблица B). Код для этого прекрасно работает.

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

Как запретить добавление пустой строки?

Sub Unique_Values()

Dim vaData As Variant
Dim colUnique As Collection
Dim aOutput() As Variant
Dim i As Long

'Put the data in an array, only checking 200 root causes for now.
vaData = Worksheets("Inputs1").Range("F2:F200").Value

'Create a new collection
Set colUnique = New Collection

'Loop through the data
For i = LBound(vaData, 1) To UBound(vaData, 1)
    'Collections can't have duplicate keys, so try to
    'add each item to the collection ignoring errors.
    'Only unique items will be added
    On Error Resume Next
        colUnique.Add vaData(i, 1), CStr(vaData(i, 1))
    On Error GoTo 0
Next i

'size an array to write out to the sheet
ReDim aOutput(1 To colUnique.Count, 1 To 1)

'Loop through the collection and fill the output array
For i = 1 To colUnique.Count
    aOutput(i, 1) = colUnique.Item(i)
Next i

'Write the unique values to column G
Worksheets("Inputs1").Range("G2").Resize(UBound(aOutput, 1), UBound(aOutput, 2)).Value = aOutput

End Sub

Спасибо!

1 Ответ

0 голосов
/ 03 октября 2019

Я думаю, что эта часть странная:
Я бы поставил 1, а не 2

UBound(aOutput, 2)

Кстати, вы просто используете списки, а не таблицы Итак, не используйте UBound (aOutput, 2), просто введите UBound (aOutput)

Например, выполните:

'size an array to write out to the sheet
ReDim aOutput(1 To colUnique.Count)

'Loop through the collection and fill the output array
For i = 1 To colUnique.Count
    aOutput(i) = colUnique.Item(i)
Next i
...