Создайте 3 линии на одном графике (именованные диапазоны) - PullRequest
0 голосов
/ 12 марта 2019

Я работал над этим в течение бесчисленных часов, не имея возможности продолжить. Любая помощь с благодарностью!

Я пытаюсь создать макрос, который может проходить и создавать около 55 графиков. У меня возникают трудности при работе с именованным диапазоном, и я верю (пока гуру здесь не докажут), что именованные диапазоны - это путь.

Я ни в коем случае не закончил с этим (я добавлю функцию цикла), но в целях иллюстрации 3 диапазона (и 3 линии, которые я хочу построить на одном графике) выглядят следующим образом:

Set rng1 = Union(Cells(SA_Row, 11), Cells(SA_Row, 42), Cells(SA_Row, 72), Cells(SA_Row, 122))
Set rng2 = Union(Cells(SA_Row, 11), Cells(SA_Row, 43), Cells(SA_Row, 73), Cells(SA_Row, 123))
Set rng3 = Union(Cells(SA_Row, 11), Cells(SA_Row, 44), Cells(SA_Row, 74), Cells(SA_Row, 124))

Следовательно, все 3 строки будут иметь одинаковое начальное значение, но тогда между различными отдельными ячейками в пределах диапазона будет большой интервал. Причина в том, что это представляет цели для разных лет (например, 2020, 2030, 2040 и т. Д.). До сих пор я в основном занимался форматированием аргументов, но я добавлю «Count = X to Y ... Выбрать регистр и т. Д.». Это хороший способ пойти правильно? В любом случае, код, который я написал до сих пор, выглядит так:

Set cht = Worksheets("Graphs").ChartObjects.Add(Top:=Graph_Position, Left:=910, Width:=160, Height:=75)

Set rng1 = Union(Cells(SA_Row, 11), Cells(SA_Row, 42), Cells(SA_Row, 72), Cells(SA_Row, 122))
Set rng2 = Union(Cells(SA_Row, 11), Cells(SA_Row, 43), Cells(SA_Row, 73), Cells(SA_Row, 123))
Set rng3 = Union(Cells(SA_Row, 11), Cells(SA_Row, 44), Cells(SA_Row, 74), Cells(SA_Row, 124))


With cht.Chart
    .ChartType = xlLineMarkers
    .HasLegend = False
    .HasAxis(xlCategory) = False
    .ChartArea.Border.LineStyle = xlNone
    .Axes(xlValue, xlPrimary).TickLabels.Font.Name = "VWAG TheSans"

        With .Axes(xlValue)
            .MaximumScale = 1
            .MajorUnit = 0.2
            .Format.Line.Visible = msoFalse
            .MajorGridlines.Format.Line.Weight = 0.35
            .MajorGridlines.Format.Line.ForeColor.RGB = RGB(217, 217, 217)
            .TickLabels.Font.Size = 4
            .TickLabels.NumberFormat = "0%"

         End With

     'Set rngSource = Range(rng1, rng2, rng3)
     '.SetSourceData rngSource


   ' .SeriesCollection.NewSeries.Values = Range("rng1")
   ' .SeriesCollection.NewSeries.Values = Range("rng2")
   ' .SeriesCollection.NewSeries.Values = Range("rng3")



        With .FullSeriesCollection(1)
            .Format.Line.ForeColor.RGB = RGB(5, 204, 216)
            .MarkerStyle = 8
            .MarkerSize = 3
            .Format.Fill.ForeColor.RGB = RGB(5, 204, 216)
            .Format.Line.Weight = 1

        End With


        With .FullSeriesCollection(2)
            .Format.Line.ForeColor.RGB = RGB(192, 10, 0)
            .MarkerStyle = 8
            .MarkerSize = 3
            .Format.Fill.ForeColor.RGB = RGB(192, 10, 0)
            .Format.Line.Weight = 1

        End With

         With .FullSeriesCollection(3)
            .Format.Line.ForeColor.RGB = RGB(50, 200, 59)
            .MarkerStyle = 8
            .MarkerSize = 3
            .Format.Fill.ForeColor.RGB = RGB(50, 200, 59)
            .Format.Line.Weight = 1

        End With

End With

"'" - это просто я играю с другой попыткой. Пока у меня либо нет данных на графике, либо просто 1 строка вместо 3 отдельных. Пожалуйста, помогите!

1 Ответ

0 голосов
/ 12 марта 2019

Полагаю, я решил эту проблему с помощью:

cht.Chart.SeriesCollection.Add Source:=rng1
cht.Chart.SeriesCollection.Add Source:=rng2
cht.Chart.SeriesCollection.Add Source:=rng3

Что вы, ребята, думаете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...