Обратите внимание, что сегодня вечером мы решим проблему с этим кодом, но при этом по-прежнему возникают ошибки при перемещении по списку значений. В настоящее время не работает, просто не хочу переформатировать строки кода. Не стесняйтесь играть вокруг. Я буду добавлять комментарии и инструкции одновременно.
Кто-то упомянул, что это можно сделать с помощью VBA. Мне нравится VBA, поэтому я взял удар на него.
Пара предположений:
1 - Отметка времени и дата не содержатся в одной и той же ячейке (т. Е. 12:00:00 AM | 21.07.2014, NOT 7/21/2014 00:00:00)
2 - Вы хотите, чтобы все подсчеты меток времени были сгруппированы в одном списке дней (т. Е. Показывать только один набор с воскресенья по субботу, а не создавать новый набор столбцов для каждого дополнительного дня - если мы начали в пятницу, мы не будет начинать группировку в пятницу, и если мы закончим во вторник через две недели, у нас не будет 16 столбцов группировок)
3 - в ваших данных нет пустых ячеек от первой строки до последней.
4 - Ваши данные с метками времени и датами имеют заголовки
Вы должны нажать alt+f11, открыть книгу, в которой у вас есть данные и исходные таблицы, и ввести этот код. Затем нажмите 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