Для этого вы можете использовать сводную таблицу.
Использовать элементы в качестве поля строк.
Использовать дату в качестве столбца и поля данных (количество дат).
Использование VBA
Если предположить, что элементы и дата находятся на листе «Лист1», начиная с ячейки A1, то сводная таблица создается на листе «Лист2», начиная с ячейки A3 в активной книге.
Sub createPivotTableReport()
Set wsData = ActiveWorkbook.Worksheets("Sheet1")
Set wsReport = ActiveWorkbook.Worksheets("Sheet2")
Set rngData = wsData.UsedRange
Set rngReport = wsReport.Range("a3")
Set pvtCache = ActiveWorkbook.PivotCaches.Add(xlDatabase, rngData.Address(True, True, 1, True))
Set pvtTable = pvtCache.CreatePivotTable(rngReport)
pvtFieldsRow = Array("Items")
pvtFieldsCol = Array("Date")
pvtTable.AddFields pvtFieldsRow, pvtFieldsCol
pvtTable.PivotFields("Date").Orientation = xlDataField
End Sub
Примечание:
В некоторых (более новых?) Версиях Excel строка
Set pvtCache = ActiveWorkbook.PivotCaches.Add(xlDatabase, rngData.Address(True, True, 1, True))
можно изменить на
Set pvtCache = ActiveWorkbook.PivotCaches.Add(xlDatabase, rngData)
А может, моя старая версия Excel просто плохая. Я не знаю.
Я также разместил решение .vbs здесь:
http://gallery.technet.microsoft.com/ScriptCenter/en-us/dde1e5e2-f5f6-4053-84fb-b820f01f1fdf