Комментарии в коде.
Sub make_charts()
Dim ws As Worksheet, tbl As ListObject, cl As Range, rng As Range
Set ws = ThisWorkbook.Sheets("ratio")
Set tbl = ws.ListObjects("Таблица3")
Application.ScreenUpdating = False
' сортируем таблицу с данными по дате
With tbl.Sort
.SortFields.Clear
.SortFields.Add2 Key:=tbl.ListColumns(1).DataBodyRange, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
tbl.AutoFilter.ShowAllData ' очищаем фильтры таблицы
' формируем коллекцию (множество) дат, имеющихся в таблице
Dim col As New Collection
On Error Resume Next
For Each cl In tbl.ListColumns(1).DataBodyRange
d = cl.Value
col.Add d, CStr(d)
Next
On Error GoTo 0
Dim ch As Chart
' перебираем все даты, по каждой из дат строим отдельную диаграмму
For Each d In col
tbl.Range.AutoFilter Field:=1, Operator:=xlFilterValues, Criteria2:=Array(2, Replace(Format(d, "m/d/yyyy"), ".", "/"))
Set rng = tbl.ListColumns(11).DataBodyRange.SpecialCells(xlCellTypeVisible)
' предварительно удаляем лист диаграммы с такой датой, если он существует
Application.DisplayAlerts = False
On Error Resume Next
ThisWorkbook.Sheets(CStr(d)).Delete
On Error GoTo 0
Application.DisplayAlerts = True
' создаем диаграмму на отдельном листе и переносим его после всех листов
Set ch = ThisWorkbook.Charts.Add2
ch.Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
With ch
.Name = CStr(d) ' задаем имя листа с диаграммой
.ChartType = xlLine ' задаем тип диаграммы (график)
.ChartTitle.Caption = "График на дату: " & CStr(d) ' задаем заголовок диаграммы
.SetSourceData rng ' задаем источник данных
' оформляем ось Х
.Axes(xlCategory).TickLabelPosition = xlLow
.Axes(xlCategory).CategoryType = xlTimeScale
.FullSeriesCollection(1).XValues = "=" & rng.Parent.Name & "!" & rng.Offset(, -1).Address
.FullSeriesCollection(1).Name = "=""Дата/время"""
.Axes(xlCategory).CategoryType = xlCategoryScale
.Axes(xlCategory).TickLabels.NumberFormat = "dd.mm.yy hm:mm;@"
' применяем стиль диаграммы
.ChartStyle = 233
End With
Next
tbl.AutoFilter.ShowAllData
Application.ScreenUpdating = True
End Sub