Как определить, какие данные включены в ось Y при создании диаграмм в VBA - PullRequest
0 голосов
/ 13 февраля 2019

Я использую vba для создания диаграмм с динамическими диапазонами, и Excel автоматически выбирает, используется ли строка или столбец данных для создания «серии» для диаграмм на основе относительных размеров набора данных (см. Изображения).Как мне предварительно определить, что значения y «ряда» всегда являются данными в одной строке, а не в одном и том же столбце.! [Неправильно]: https://imgur.com/gallery/4pm5E51! [Исправить]: https://imgur.com/gallery/11vIQGe

Первое сообщение, извинения за неправильное форматирование и т. д.

Подтверждено, что диапазон данных указан правильно.Почти на 100% уверены, что это потому, что в неправильном сценарии строк больше, чем столбцов, поэтому по умолчанию используются значения из одного столбца вместо значений из одной строки.

Set rng = Selection

    Sheet9.Activate
    ActiveSheet.Shapes.AddChart2(-1, xlLine, , , WorksheetFunction.max(500, 1.7 * lcol)).Select

    With ActiveChart
        .SetSourceData Source:=rng
        .FullSeriesCollection(1).XValues = Sheet10.Range(Sheet10.Cells(5, 3), Sheet10.Cells(5, lcol2))

        .SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis)
        .SetElement (msoElementPrimaryValueAxisTitleAdjacentToAxis)

        .HasTitle = True
        .ChartTitle.Text = "Equipment Utilization (Weekly)"
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Text = "Date"
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Text = "Utilization"
        .HasLegend = True
        .Axes(xlCategory).Select
        Selection.TickLabels.Orientation = xlUpward

        .Axes(xlSecondary).TickLabels.NumberFormat = "0.0%"
        .Axes(xlValue).MaximumScale = 1

    End With

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Вы можете попробовать это.Поскольку у меня нет ваших данных, вам, возможно, все же придется немного изменить это.Кроме того, вы должны использовать график xyscatter (это то, что я использовал).Наконец, плохая практика - использовать выделение и выделение при создании кода.Попробуйте изменить это, чтобы не использовать их.

Sub Test()
    Dim rng As Range
    Dim sht As Worksheet

    Dim intI As Integer
    Dim strSheet As String
    Dim lCol As Long
    Dim lCol2 As Long
    Dim lRow As Long
    Dim lRow2 As Long

    strSheet = "Sheet1"
    Set sht = ThisWorkbook.Worksheets(strSheet)

    Set rng = sht.Range("D5")
    lCol = rng.Column
    lCol2 = sht.Range(sht.Cells(rng.Row, _
                      sht.Columns.Count).Address).End(xlToLeft).Column
    lRow = rng.Row + 3 '3 is the offset from D5!
    lRow2 = sht.Range(sht.Cells(sht.Rows.Count, _
                      rng.Column).Address).End(xlUp).Row

    sht.Shapes.AddChart2 -1, xlXYScatterLines, , , _
                         WorksheetFunction.Max(500, 1.7 * lCol)

    With sht.Shapes(sht.Shapes.Count).Chart
        '.SetSourceData Source:=Rng
        For intI = lCol To lCol2
            .SeriesCollection.NewSeries
            .FullSeriesCollection(1).XValues = _
                       sht.Range(sht.Cells(rng.Row, lCol), sht.Cells(rng.Row, lCol2))
            .FullSeriesCollection(1).Values = _
                       sht.Range(sht.Cells(lRow, intI), sht.Cells(lRow2, intI))
        Next intI

        .SetElement msoElementPrimaryCategoryAxisTitleAdjacentToAxis
        .SetElement msoElementPrimaryValueAxisTitleAdjacentToAxis

        .HasTitle = True
        .ChartTitle.Text = "Equipment Utilization (Weekly)"
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Text = "Date"
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Text = "Utilization"
        .HasLegend = True
        .Axes(xlCategory).TickLabels.Orientation = xlUpward

        '.Axes(xlSecondary).TickLabels.NumberFormat = "0.0%"
        '.Axes(xlValue).MaximumScale = 1

    End With

    Set rng = Nothing
    Set sht = Nothing

End Sub
0 голосов
/ 14 февраля 2019

Попробуйте: ActiveChart.SetSourceData Source:=ActiveSheet.range("A5:E15"), PlotBy:=xlColumns

Источник: https://docs.microsoft.com/en-us/office/vba/api/excel.chart.setsourcedata

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