Страницы: 1
RSS
Макрос для группировки
 
Здравствуйте. Имеется файл, в котором есть необходимость сгруппировать данные по дням (лист "Исходные"). Вручную это просто - выделить видимый диапазон, нажать "Данные - Группировать", а затем, выделяя по одной строку с датой, нажимать "Разгруппировать". В итоге получится то, что на листе "Результат".

Но это просто, когда данных мало. Когда данные за несколько месяцев, то получается очень большой объем монотонной работы.
Можно ли упростить этот процесс макросом? Я вижу макрос таким:
1. Выделить видимый диапазон.
2. Нажать "Данные - Группировать", выбрать "строки".
3. В диапазоне А:А найти строку, содержащую год (в данном случае, 2018 или 2019). Либо подсвеченные определенным цветом строки. Либо те строки, у которых в диапазоне Е:Е указано "Есть".
4. Выделить целую такую строку.
5. Нажать "Данные - Разгруппировать"
6. Повторить 3-5 до первой пустой ячейки в диапазоне А:А.

Я видел https://www.planetaexcel.ru/techniques/9/47/ , но, к сожалению, моих знаний не хватает, чтоб переделать под себя.
 
andronus,
Код
Sub An()
Dim v(), i&, j&
  v = Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value
  For i = 2 To UBound(v)
    If IsDate(v(i, 1)) Then
      If j > 0 And i - j > 1 Then Range(Rows(j + 1), Rows(i - 1)).Group
      j = i
    End If
  Next
  If j > 0 And i - j > 1 Then Range(Rows(j + 1), Rows(i - 1)).Group
End Sub
А Вам правда удобно иметь даты в виде текста? Превратить даты в числовые значения легко: выделить столбец А, Ctrl+h, заменить точку на точку.
 
Казанский, вот бы мне так научиться макросы писать... Совсем неясный код. но он работает, спасибо!

По поводу дат - в текущей задаче действительно удобнее в виде текста. Плюс ко всему, перестанет срабатывать условное форматирование на основе столбца Е.
Про точку не знал - спасибо!
 
Казанский, если позволите, два вопроса:
1. Вижу, что написано If IsDate - понятно, что если в ячейке формат даты, то далее применяется макрос. Но у меня не даты, а текст. Как эксель понимает, что это дата? И как переделать на поиск именно текста, в данном случае "2018" или "2019"? Зачем это нужно - например, изменится условие заглавной строки в группировке, то есть, станет не дата, а текст, например, "май" или "июнь".
2. Как применить этот макрос не ко всему листу, а к выделению? Зачем это нужно - во-первых, при прогоне макроса на уже сгруппированном листе добавляются новые группировки, во-вторых, есть задача группировать новые данные на листе, в которому же имеется группировка.
Изменено: andronus - 15.02.2019 12:44:44
Страницы: 1
Наверх