У меня есть две таблицы на листе Excel 2016 (win 10): data
и template
.Data
содержит класс и связанные с ним данные.Лист сортируется (az) по классу.Template
содержит фоновые данные с одной строкой на класс.Примером КЛАССА могут быть oranges
, apples
, blackberries
.
Я просматриваю список классов в Template
.Для каждого класса я использую Автофильтр, чтобы выбрать определенный класс на листе «данных», а затем подсчитать количество записей с помощью .SpecialCells(XlCellTypeVisible).Rows.count
.Я сохраняю счет на листе Template
.Первый класс фильтруется и считается правильно.Все следующие классы отфильтрованы правильно, но количество равно нулю.
Пример:
"data" sheet
CLASS column (sorted a-z)
apples
apples
apples
apples
apples
blackberries
blackberries
blackberries
oranges
oranges
"Template" sheet
CLASS column
apples
blackberries
melons
oranges
Желаемый результат:
"Template" sheet
CLASS column myCount column
apples 5
blackberries 3
melons 0
oranges 2
Фактические результаты:
"Template" sheet
CLASS column myCount column
apples 5
blackberries 0
melons 0
oranges 0
Мой код:
Sub CountAll()
Dim rng As Range
Dim myRow As Integer 'Row number in Template
Dim thisClass As String 'Class we are currently counting
Dim myCount As Integer 'Number of times thisClass is in "data"
Dim numClasses as Integer 'Set to the number of classes in "Template"
...
For myRow = 1 to numClasses
thisClass = Worksheets("template").Cells(myRow, 1).Value
Set rng = Worksheets("data").Range("A:A")
With rng
.AutoFilter Field:=1, Criterial:=thisClass
End With
myCount = rng.SpecialCells(xlCellTypeVisible).Rows.count
Worksheets("template").Cells(myRow,3).Value = myCount
ActiveSheet.showAllData 'Display all data again.
Next myRow
End Sub
Этот код является временным (6-12 месяцев), пока не будет приобретен генератор отчетов.VBA не был моим выбором.Я лучше со сборкой, C, FORTRAN и JAVA.Любые предложения будут ценны.Я потратил около 4 часов на изучение этой проблемы.