【问题标题】:Excel macro to create line chart excluding columns in betweenExcel宏创建折线图,不包括中间的列
【发布时间】:2019-10-09 19:22:09
【问题描述】:

我想在 excel 宏中创建折线图。我在 excel 中有下表。

第一个折线图包含单元格 A 和 B 的值范围。第二个折线图包含单元格 A 和 C 的值范围。第三个折线图包含单元格 A 和 D 的值范围。

ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range("A1:D3")
ActiveChart.ApplyDataLabels
ActiveChart.ChartType = xlLine

上面的代码只生成一个 A1 到 D4 范围内的折线图。

【问题讨论】:

    标签: excel charts vba


    【解决方案1】:

    这是一个很好的问题,宏记录器可以很好地提示如何回答。您只需要定义另一个系列集合。这是宏记录器在未经修改的情况下生成的内容。

    Sub Macro1()
        Range("A1:D2").Select
        ActiveSheet.Shapes.AddChart.Select
        ActiveChart.ChartType = xlLine
        ActiveChart.SetSourceData Source:=Range("Sheet1!$A$1:$D$2")
        ActiveChart.PlotArea.Select
        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.SeriesCollection(2).Name = "=Sheet1!$A$3"
        ActiveChart.SeriesCollection(2).Values = "=Sheet1!$B$3:$D$3"
    End Sub
    


    下面是我不使用 select 的方法

    Sub createChart()
        Dim wks As Worksheet
        Set wks = Worksheets("Sheet1")
    
        Dim chrt As Chart
        Set chrt = wks.Shapes.AddChart.Chart
    
        With chrt
            .ChartType = xlLine
            .SetSourceData Source:=Range("Sheet1!$A$1:$D$2")
            .SeriesCollection.NewSeries
            .SeriesCollection(2).Name = "=Sheet1!$A$3"
            .SeriesCollection(2).Values = "=Sheet1!$B$3:$D$3"
        End With
    End Sub
    

    循环

    Sub createChartWithLoop()
        Dim wks As Worksheet
        Set wks = Worksheets("Sheet1")
    
        Dim chrt As Chart
        Set chrt = wks.Shapes.AddChart.Chart
    
        Dim chartRange As Range
        Set chartRange = wks.Range("A1:A4")
    
        With chrt
            .ChartType = xlLine
            .SetSourceData Source:=Range(wks.Range("A" & chartRange.Row & ":D" & chartRange.Row).Address)
    
            For i = chartRange.Row + 1 To chartRange.Rows.Count
                .SeriesCollection.NewSeries
                .SeriesCollection(i).Name = wks.Cells(i, 1)
                .SeriesCollection(i).Values = wks.Range("B" & i & ":D" & i)
            Next i
        End With
    End Sub
    


    EDIT - 从每个数据创建不同的图表

    Sub createDifferentCharts()
        Dim wks As Worksheet
        Set wks = Worksheets("Sheet1")
    
        Dim chartRange As Range
        Set chartRange = wks.Range("A1:A4")
    
        For i = chartRange.Row To chartRange.Rows.Count
            With wks.Shapes.AddChart.Chart
                .ChartType = xlLine
                .SetSourceData Source:=Range(wks.Range("A" & i & ":D" & i).Address)
                .Parent.Left = 20 + i * 50
                .Parent.Top = 40 + i * 50
            End With
        Next i
    End Sub
    

    结果:


    为每个数据创建不同的图表,其中A列是标签:

    Sub createDifferentCharts()
        Dim wks As Worksheet
        Set wks = Worksheets("Sheet1")
    
        Dim chartRange As Range
        Set chartRange = wks.Range("A1:D4")
    
        For col = chartRange.Column + 1 To chartRange.Columns.Count
            With wks.Shapes.AddChart.Chart
                .ChartType = xlLine
                .SetSourceData Source:=Range(wks.Cells(1, 1).Address)
                .SetSourceData Source:=wks.Range("A1:A4," & Range(Cells(chartRange.Row, col), Cells(chartRange.Rows.Count, col)).Address)
                .Parent.Left = col * 30
                .Parent.Top = col * 30
            End With
        Next col
    End Sub
    

    【讨论】:

    • 我想生成 3 个不同的图表。图 1 - X 轴单元格 A1:A4,Y 轴单元格 C1:C4。图 2 - X 轴单元格 A1:A4,Y 轴单元格 B1:B4。图 3 - X 轴单元格 A1:A4,Y 轴 - 单元格 D1:D4。
    • 好的,看看我的编辑。最后一个代码块将使用 A 列作为轴标签,为每列数据创建不同的折线图。这是你要找的吗?
    • 以上代码工作正常。但是有时我会收到自动化错误未指定错误 -2147467259。如果我调试该功能,我没有收到上述错误。但是,只有当我按 F5(直接运行) 时,我才会收到上述错误
    猜你喜欢
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多