Автоматизация макросом. Код помещен в модуль листа с диаграммой [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long, nt As Long, kt As Long If Target.Address = "$F$4" Or Target.Address = "$G$4" Then For i = 2 To Range("A" & Rows.Count).End(xlUp).Row If Range("F4") = CDate(Range("A" & i)) Then nt = i If Range("G4") = CDate(Range("A" & i)) Then kt = i Next i ActiveSheet.ChartObjects("Chart 1").Activate ActiveChart.SetSourceData Source:=Sheets("Al").Range("A" & nt & ":B" & kt) ActiveChart.SeriesCollection(1).Name = Range("B1") End If End Sub
[/vba] Столбцы С и D удалил, так как для построения графика не нужны. В ячейках ниже задаваемых дат именованные формулы для определения позиций начала и конца диапазона данных. Сделаны для справки и в работе макроса не используются. Можно удалить формулы в ячейках и в менеджере имен. Данные в столбец А и В можно добавлять. Макрос определит весь диапазон. Пользователю необходимо лишь задавать даты "С" и "ПО".
Автоматизация макросом. Код помещен в модуль листа с диаграммой [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long, nt As Long, kt As Long If Target.Address = "$F$4" Or Target.Address = "$G$4" Then For i = 2 To Range("A" & Rows.Count).End(xlUp).Row If Range("F4") = CDate(Range("A" & i)) Then nt = i If Range("G4") = CDate(Range("A" & i)) Then kt = i Next i ActiveSheet.ChartObjects("Chart 1").Activate ActiveChart.SetSourceData Source:=Sheets("Al").Range("A" & nt & ":B" & kt) ActiveChart.SeriesCollection(1).Name = Range("B1") End If End Sub
[/vba] Столбцы С и D удалил, так как для построения графика не нужны. В ячейках ниже задаваемых дат именованные формулы для определения позиций начала и конца диапазона данных. Сделаны для справки и в работе макроса не используются. Можно удалить формулы в ячейках и в менеджере имен. Данные в столбец А и В можно добавлять. Макрос определит весь диапазон. Пользователю необходимо лишь задавать даты "С" и "ПО".AlexM
AlexM, большое спасибо за макрос. Столбцы C и D были добавлены для того, чтобы на графике распознавался формат даты. Как видите, сейчас на горизонтальной оси выводятся не даты, а числа 1,2,... Можно сделать так, чтобы на основании А и B на графике автоматически распознавались даты?
AlexM, большое спасибо за макрос. Столбцы C и D были добавлены для того, чтобы на графике распознавался формат даты. Как видите, сейчас на горизонтальной оси выводятся не даты, а числа 1,2,... Можно сделать так, чтобы на основании А и B на графике автоматически распознавались даты?ArtiEx
Ну если очень хочется программно, то замените код на следующий [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long, nt As Long, kt As Long If Target.Address = "$F$4" Or Target.Address = "$G$4" Then Columns("A:A").NumberFormat = "m/d/yyyy" For i = 2 To Range("A" & Rows.Count).End(xlUp).Row Range("A" & i) = CDate(Range("A" & i)) If Range("F4") = Range("A" & i) Then nt = i If Range("G4") = Range("A" & i) Then kt = i Next i ActiveSheet.ChartObjects("Chart 1").Activate ActiveChart.SetSourceData Source:=Sheets("Al").Range("A" & nt & ":B" & kt) ActiveChart.SeriesCollection(1).Name = Range("B1") End If End Sub
[/vba]
Ну если очень хочется программно, то замените код на следующий [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long, nt As Long, kt As Long If Target.Address = "$F$4" Or Target.Address = "$G$4" Then Columns("A:A").NumberFormat = "m/d/yyyy" For i = 2 To Range("A" & Rows.Count).End(xlUp).Row Range("A" & i) = CDate(Range("A" & i)) If Range("F4") = Range("A" & i) Then nt = i If Range("G4") = Range("A" & i) Then kt = i Next i ActiveSheet.ChartObjects("Chart 1").Activate ActiveChart.SetSourceData Source:=Sheets("Al").Range("A" & nt & ":B" & kt) ActiveChart.SeriesCollection(1).Name = Range("B1") End If End Sub