【问题标题】:Chart from dynamic range来自动态范围的图表
【发布时间】:2020-02-24 19:24:33
【问题描述】:

我正在使用 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 

到目前为止,它从另一个工作表中获取 xvalue,但是我想将当前工作表用于值

在添加的图片中,2021、2022、2023 不应显示为 x 轴,因为它们没有任何数据。

【问题讨论】:

    标签: excel vba dynamic excel-charts


    【解决方案1】:

    请试试这个代码:

    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...中设置要使用的值...

    【讨论】:

    • 嗨 FaneDuru 感谢您的帮助,宏在多行上运行完美,但是当只有一行时,它不起作用。你能帮忙吗
    • 单行?请向我们展示您的数据范围在这种情况下的样子。当我回家时,我会解决它...尝试将 'lastCol = sh.Cells(3, Cells...' 更改为 'lastCol = sh.Cells (lastR,ow, Cells'...
    • 单行我的意思是说,如果你看到上面的图片,有两行数据,你的宏给出了一个完美的图表。当会有一行时,我想要相同的图表,但当时它失败了。请你帮助我好吗。附加我为一行获取的图像的链接drive.google.com/open?id=15S9BFM-f7EdbRllVFJQOfSj06DwzA91y
    • 所以基本上对于单行图表将是 1 系列。但它没有给出您在附加链接中看到的图表。
    • 非常感谢。它起作用了,我只是对您的代码进行了一些更改。 lastCol = sh.Cells(2, Cells.Columns.count).End(xlToLeft).column 你是个天才。再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 2019-08-25
    • 2022-07-05
    相关资源
    最近更新 更多