2016-06-19 7 views
-1

Я хочу создать счетчик в рутине, которая будет подсчитывать, сколько раз определенная запись появилась до сих пор.Группа VBA с использованием общедоступных типов

Подпрограмма, которую я создал до сих пор, заполняет данные в электронной таблице через For..Next Loop. Для каждой из этих строк у меня есть дополнительный столбец, который будет представлять счетчик и подсчитывает, сколько раз в предыдущих строках появилась характеристика строки ввода. Для этого я использую функцию application.worksheetfunction.CountIf, но ссылочный диапазон должен быть динамическим.

Например, у меня есть следующая таблица Example Table

общая идея состоит в том, чтобы сгруппировать по месяцам и расходов типа и имеет величину суммы. Роль счетчика состоит в том, чтобы идентифицировать эти строки, которые могут быть сгруппированы вместе и пронумеровать их значения и суммировать их. Таблица имеет приблизительно 10 000 строк и 53 столбца. Для этого процесса, я создал следующий общественный тип:

>public type OP 
>>Month as string 
>>expense_type as string 
>>amount as double 
>end type 

Sub NewOuput() 
with sheet1 

>for i=1 lastrow 'output is the existing table that i get the data and i want to manipulate and then populate them into another table of the same format 
>>op.month=output(i,1) 
>>op.expense_type=output(i,2) 
>>op.amount=output(i,3) 
'---------------------------- 
>> .cells(i,1)=op.month 'this is the population of hte data in the new table 
>> .cells(i,2)=op.expense_type 
>> .cells(i,3)=op.amount 
next i 
end with 
end sub 

Через функции, я пытаюсь определить те строки, которые нужно суммировать-вверх, а затем вызвать соответствующие функции в выходной части петли.

Функция countif excel не может быть привязана к массивам, поэтому теперь это исключено из вопроса. Я прочитал много сообщений по различным способам группировки, включая соединения данных, коллекции и другие индивидуальные подходы. Коллекции оказались лучшими, но я пропустил некоторые из них. Имеет ли это смысл? Любые предложения приветствуются

+0

добавить еще пример исходных данных и результатов их обработки – user3598756

+0

@ user3598756 Спасибо за ваш ответ. Я загрузил основной код и пример того, что я хочу обработать. Имеет ли это смысл? – Evangelia

ответ

0

Я на самом деле не понять ваши точные потребности, но так как, например, таблица образа я бы как следует:

Sub NewOuput() 

    With sheet1 

     'fill in the voids of 1st column 
     With .Range("A1:A" & .Cells(.Rows.Count, "B").End(xlUp).row) '<--| change "A" and "B" to your actual 1st and 2nd columns index 
      .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C" 
      .Value = .Value 
     End With 

     'more code to exploit a "full" database structure 


    End With 
End Sub 
+0

большое спасибо за отзыв! Я вижу вашу мысль. Я решил использовать записанный макрос, чтобы автоматизировать ручной шаг и создать счетчик. Мне потребовалось слишком много времени, чтобы пройти через этот момент - промежуточный шаг - достичь конечной точки, которая должна была «группироваться». Наконец, мне удалось группировать и суммировать типы и массивы. Большое спасибо за ваше время! Это очень полезно! – Evangelia

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

  • Нет связанных вопросов^_^