Здравствуйте Уважаемые форумчани и гуру VBA Поздравляю вас с переездом на новый движок и с Наступающим Новым 2013 годом!!! Ура :!: Подскажите пожалуйста как можно сгруппировать даты в столбце B по месяцам, не добавляя при этом лишней информации в таблицу.
На листе "Результат" уже всё сделано... Или я задание не понял? o_O Автоматически должно группироваться? После ввода данных?
Современные языки программирования обязаны иметь встроенный метод ChuckNorris(), который возвращает нужные тебе данные из любого объекта, даже если их там нет...
Sub groupData()
Dim iL As Long, lE As Long, i As Long
Application.ScreenUpdating = False
Cells.ClearOutline
iL = [b65536].End(xlUp).Row: lE = iL: i = iL
Do
If Month(Cells(iL - 1, 1)) <> Month(Cells(iL, 1)) Then
Range(Cells(lE, 2), Cells(IIf(i = iL, i, iL + 1), 2)).EntireRow.Group
lE = iL - 1
End If
iL = iL - 1
If (iL - 1) < 3 Then
Range(Cells(lE, 2), Cells(iL, 2)).EntireRow.Group
Exit Do
End If
Loop
ActiveSheet.Outline.SummaryRow = xlAbove
Application.ScreenUpdating = True
End Sub
Sub groupData()
Dim iL As Long, lE As Long, i As Long
Application.ScreenUpdating = False
Cells.ClearOutline
iL = [b65536].End(xlUp).Row: lE = iL: i = iL
Do
If Month(Cells(iL - 1, 2)) <> Month(Cells(iL, 2)) _
Or Year(Cells(iL - 1, 2)) <> Year(Cells(iL, 2)) Then
Range(Cells(lE, 2), Cells(IIf(i = iL, i, iL + 1), 2)).EntireRow.Group
lE = iL - 1
End If
iL = iL - 1
If (iL - 1) < 3 Then
Range(Cells(lE, 2), Cells(iL, 2)).EntireRow.Group
Exit Do
End If
Loop
ActiveSheet.Outline.SummaryRow = xlAbove
Application.ScreenUpdating = True
End Sub
Johny не смог разобраться в вашем коде. у меня в 2007 он только копирует даты в лист "Результат Excel 2003" без всякой группировки.
KuklP Ваш код работает, но есть еще один нюансик. Как пропустить или исключить группировку, если дата в месяце только одна. Потому что код в этом случае группирует эту дату с предыдущем и следующем месяцем.