Observação - para solucionar esse código esta noite, ainda haverá alguns erros na lista de valores. Não funciona atualmente, só não quero reformatar minhas linhas de código. Sinta-se à vontade para brincar. Vou adicionar comentários e instruções ao mesmo tempo.
Alguém mencionou que isso poderia ser feito com o VBA. Eu gosto do VBA, então eu dei uma pancada nele.
Algumas suposições:
1 - O carimbo de data / hora e a data não estão contidos na mesma célula (ou seja, 12:00:00 AM | 7/21/2014 NÃO 7/21/2014 00:00:00)
2 - Você deseja agrupar todas as contagens de carimbos de data e hora em uma única listagem de dias (ou seja, mostrar apenas um conjunto de domingo a sábado e não criar um novo conjunto de colunas para cada dia adicional. Sexta-feira, não iniciaríamos o agrupamento na sexta-feira, e se terminássemos em uma terça-feira duas semanas depois, não teríamos 16 colunas de agrupamentos)
3 - Não há células nulas em seus dados da primeira linha até a última.
4 - Seus dados de data e hora e data têm cabeçalhos
Você deve pressionar alt + f11 e abrir a pasta de trabalho em que você tem os dados e as planilhas de origem e inserir esse código. Em seguida, pressione F5 .
Public Sub PrintDateGroups()
Dim icontrol As Integer
Dim iweeknum As Integer
Dim ipasscount As Integer
Dim lngwalktimevalues As Long
Dim ipasstimecount As Integer
icontrol = 1
Do Until icontrol = -1:
If ThisWorkbook.Sheets("Data").Cells(icontrol,2).Value = "" Then
icontrol = -1
Else
icontrol = icontrol + 1
iweeknum = Weekday(ThisWorkbook.Sheets("Data").Cells(icontrol, 1).Value, vbSunday)
For lngwalktimevalues = 0 To 99999999 Step 694444.4375
If (TimeValue(Format(ThisWorkbook.Sheets("Data").Cells(icontrol, 2).Value, "hh:mm:ss")) * 100000000) <= lngwalktimevalues Then
If iweeknum = 1 Then
If ThisWorkbook.Sheets("Destination").Cells(Round((lngwalktimevalues / 694444.4375) + 1, 0), 2).Value <> "" Then
ThisWorkbook.Sheets("Destination").Cells(Round((lngwalktimevalues / 694444.4375) + 1, 0), 2).Value = ThisWorkbook.Sheets("Destination").Cells(lngwalktimevalues / 694444.4375, 2).Value + 1
Exit For
Else
ThisWorkbook.Sheets("Destination").Cells(Round((lngwalktimevalues / 694444.4375) + 1, 0), 2).Value = 1
Exit For
End If
Else
If ThisWorkbook.Sheets("Destination").Cells((lngwalktimevalues / 694444.4375) + 1, ((3 * iweeknum) + (iweeknum - 2))).Value = "" Then
ThisWorkbook.Sheets("Destination").Cells((lngwalktimevalues / 694444.4375) + 1, ((3 * iweeknum) + (iweeknum - 2))).Value = 1
Exit For
Else
ThisWorkbook.Sheets("Destination").Cells((lngwalktimevalues / 694444.4375) + 1, ((3 * iweeknum) + (iweeknum - 2))).Value = ThisWorkbook.Sheets("Destination").Cells(lngwalktimevalues / 694444.4375, ((3 * iweeknum) + (iweeknum - 2))).Value + 1
Exit For
End If
End If
End If
Next lngwalktimevalues
End If
Loop
End Sub