Все становится намного проще, если вы создаете и управляете своей серией индивидуально, а не добавляете сразу весь набор данных с помощью SetSourceData
.Пример:
Dim xaxis As Range
Dim yaxis As Range
Set xaxis = Range("$B$26", Range("$B$26").End(xlDown))
Set yaxis = Range("$C$26", Range("$C$26").End(xlDown))
Dim c As Chart
Set c = ActiveWorkbook.Charts.Add
Set c = c.Location(Where:=xlLocationAsObject, Name:="Sheet1")
With c
.ChartType = xlLine
' set other chart properties
End With
Dim s As Series
Set s = c.SeriesCollection.NewSeries
With s
.Values = yaxis
.XValues = xaxis
' set other series properties
End With
EDIT
Так называемые «линейные графики» не всегда ведут себя так, как вы ожидаете.Это наглядный пример.Когда время находится на оси x и оно отформатировано как дд / мм / гггг чч: мм, линейные диаграммы вынуждают все точки с одинаковой датой (днем) в одну и ту же ячейку, независимо от времени суток.Почему они сделали это так?Я понятия не имею.Линейные графики делают все другие сумасшедшие вещи.
Я почти уверен, что вам нужен точечный график.Фактически, то, что вы хотите, это почти всегда точечный график и почти никогда не линейный график.
Вот пример.Я сделал свои собственные данные о температуре, но сохранил ваши даты.
Произведено с использованием этого кода:
Dim xaxis As Range
Dim yaxis As Range
Set xaxis = Range("$B$26", Range("$B$26").End(xlDown))
Set yaxis = Range("$C$26", Range("$C$26").End(xlDown))
Dim c As Chart
Set c = ActiveWorkbook.Charts.Add
Set c = c.Location(Where:=xlLocationAsObject, Name:="Sheet1")
With c
.ChartType = xlXYScatterLines 'A scatter plot, not a line chart!
' set other chart properties
End With
Dim s As Series
Set s = c.SeriesCollection.NewSeries
With s
.Values = yaxis
.XValues = xaxis
' set other series properties
End With
With c.Axes(xlCategory)
.MajorUnit = 0.125
End With
With c
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Time"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Temperature"
.HasLegend = False
End With