Диаграмма из диапазона Dynami c - PullRequest
1 голос
/ 23 февраля 2020

Я делал график из динамического c графика с использованием VBA. Диаграмма идет как положено, однако я хочу, чтобы ось X показала значения X только из столбцов, которые содержат данные. Здесь он показывает все столбцы, включая те, которые не имеют никаких данных.

Ниже мой код:

Dim rng As Range
Dim cht As Object
Dim LstRw2 As Long
Dim N As Long
    N = Cells(1, 1).End(xlDown).Row
   Set rng = Range("E2:O" & N)
  Set cht = ActiveSheet.Shapes.AddChart
  cht.chart.SetSourceData Source:=rng
  cht.chart.ChartType = xlColumnClustered
    ActiveSheet.ChartObjects("Chart 1").chart.SeriesCollection(1).XValues = _
"='Sheet1'!$F$11:$O$11"
End Sub 

На данный момент он берет значения x из другого листа, однако я хочу используйте текущий рабочий лист для значений

enter image description here

На добавленном рисунке 2021,2022,2023 не должны отображаться для оси x, поскольку у них нет данных.

1 Ответ

1 голос
/ 23 февраля 2020

Попробуйте этот код, пожалуйста:

Sub MakeChart()
 Dim rng As Range, cht As ChartObject, LstRow As Long, i As Long
 Dim sh As Worksheet, lastCol As Long, lastC As Long, ColAddr As String
  Set sh = ActiveSheet      'use here your sheet
   LstRow = sh.Cells(Cells.Rows.count, 1).End(xlUp).row 'last row in A:A
   'Last column on the third row
   For i = 2 To LstRow
        lastC = sh.Cells(i, Cells.Columns.count).End(xlToLeft).column
        If lastC > lastCol Then lastCol = lastC
   Next i
   ColAddr = sh.Cells(1, lastCol).Address 'last column address (on first row)

   Set rng = sh.Range(sh.Range("E2"), sh.Cells(LstRow, lastCol))
   Set cht = ActiveSheet.ChartObjects.Add(left:=100, top:=80, width:=350, _
                                                                height:=250)

   cht.Chart.SetSourceData source:=rng
   cht.Chart.ChartType = xlColumnClustered
    sh.ChartObjects(sh.ChartObjects.count).Chart.SeriesCollection(1).XValues = _
                                            "='" & sh.Name & "'!$F$1:" & ColAddr
End Sub

Я обновил код, чтобы использовать более длинный ряд диапазона, чтобы установить, какие значения будут использоваться от Chart.SeriesCollection(1).XValues ...

...