2017-02-09 2 views
1

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

With ActiveSheet 
ArrCSID = .Range(.Cells(2, "A"), .Cells(.Rows.Count, "A").End(xlUp)).Value2 
Columns("A").Interior.ColorIndex = xlNone 

On Error Resume Next 
For Each a In ArrCSID 
    CollecUniqueCSID.Add a, a 
Next 

For d = LBound(ArrCSID, 1) To UBound(ArrCSID, 1) 
    <<Some validation check on the values of ArrCSID>> 
Next d 

CountCSIDTotal = d - 1 
CountCSIDDistinct = CollecUniqueCSID.Count 

Это не работает. Значение CountCSIDDistinct равно 0 для ввода (1,1,2,2), тогда как ожидаемое значение равно 2. Может ли кто-нибудь помочь мне с исправлением? Необходимо использовать коллекцию, не использовать словарь или любую другую структуру данных.

ответ

0

Основная проблема заключается в том, как вы добавляете элемент в коллекцию. Если вы закомментируете строку On Error Resume Next, вы начнете видеть ошибки.

определение Collection метод Add выглядит следующим образом: enter image description here

К этому: CollecUniqueCSID.Add a, a Ваше высказывание a это значение и ключ. Проблема в том, что ключ должен быть строкой, и вы вводите целое число.

Если это то, что вы действительно хотите, то отбрасывать целое число в строку, как это:

CollecUniqueCSID.Add Item:=a, Key:=CStr(a) 

Это, конечно, выдаст ошибку, если у вас есть дубликат ключа, который может быть, почему у вас есть On Error Resume Next линии чтобы пропустить дубликаты.


Если вы ищете для хранения обоих значений как точка ху, использовать массив вместо:

CollecUniqueCSID.Add Item:=Array(a, a) 
+0

Изменение добавить заявление следующим образом работали: CollecUniqueCSID.Add Пункт: = а, Key : = CStr (a) Большое спасибо @Portland Runner –

Смежные вопросы