VBA диаграмма X ось - PullRequest
       3

VBA диаграмма X ось

0 голосов
/ 06 января 2019

Это мой код VBA. Я строю график, на котором я показываю диапазон значений. Я хотел бы отобразить год и квартал на оси X моего графика.

Sub VBAChart2()

    Dim colunmA As Integer
    colunmA = Range("B1").End(xlToRight).Column - 1

    Dim Num As Integer
    Dim xrng As Range

    Set xrng = Range("C2:F2")

back:
Num = InputBox("àéæå ùåøä ìäöéâ áâøó?")
    If colunmA > Num And Num > 0 Then

        ActiveSheet.Shapes.AddChart2(201, xlXYScatterLines, Range("L10").Left, Range("L10").Top, 450, 200).Select

        With ActiveChart

        .SetSourceData Source := Range(Range("B2").Offset(0, Num - 1), Range("C3:C6").Offset(0, Num - 1))
        .SetElement(msoElementDataLabelTop)

        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "ùðä åøáòåï"
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "îëø SO"

        .SeriesCollection(1).XValues = xrng
        .SeriesCollection(1).Values = Range("C1:F2")

        End With

        Else: MsgBox("ðà ìä÷ìéã îñôø ùåøä äîåôéò áèáìä")
        GoTo back

    End If

End Sub

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Я не думаю, что вы предлагаете, возможно. Я не знаю, есть ли какой-нибудь удобный способ просто установить некоторые даты / интервал как xvalues и сделать так, чтобы Excel автоматически определял четверти.

Однако, если вы не ограничены xlXYScatterLines типом диаграммы и можете свободно добавить другую в свои исходные данные (на свой лист), вы можете попробовать следующее.

Если я создам фиктивные данные, подобные этим (желтые ячейки x values, зеленые ячейки values):

Source data

и затем используйте код ниже (который относится к диапазонам / ячейкам на изображении выше):

Option Explicit

Sub PlotQuarterAndYears()

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")

    With ws.Shapes.AddChart2(201, xlLine, ws.Range("L10").Left, ws.Range("L10").Top, 450, 200).Chart

        .ChartTitle.Text = "Some chart"
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Text = "ùðä åøáòåï"
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Text = "îëø SO"

        With .SeriesCollection.NewSeries
            .XValues = ws.Range("C2:F3")
            .Values = ws.Range("C4:F4")
        End With
    End With

End Sub

Я тогда получаю это:

Output chart

Кажется, это то, что вы описали. Очевидно, вам нужно было бы адаптироваться к вашим собственным исходным данным / диапазонам / рабочему листу, но основной вывод из этого - поместить ваш xvalues в две строки и построить линейный график.

0 голосов
/ 06 января 2019

Графики Excel, к сожалению, не такие гибкие. В итоге вы получите «равномерно» помеченную ось X, это просто вопрос того, что показано, как в «2015,2016,2017,2018» или как «2015Q1, 2015Q2,2015Q3 ...», или как угодно - одна ось, только одна серия меток осей. Да, Excel не самый лучший в плане графиков: (

Другая возможность (которая, кстати, мне очень не нравится ...) состоит в том, чтобы иметь две оси Y, что даст вам две оси X; тем не менее, они окажутся один сверху и один снизу диаграммы (как описано здесь https://superuser.com/questions/188064/excel-chart-with-two-x-axes-horizontal-possible).

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