Excel macro to create line chart excluding columns in between

混江龙づ霸主 提交于 2020-01-06 07:00:46

问题


I want to create line chart in excel macro. I have below table in excel.

First Line Chart contains range of values from Cell A and B. Second Line Chart contains range of values from Cell A and C. Third Line Chart contains range of values from Cell A and D.

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

Above code produces only one Line Chart for range A1 to D4.


回答1:


This is a good question that the macro recorder can provide a good hint on how to answer. You just need to define another series collection. Here is what the macro recorder produces without modification.

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


Here is how I would do it without using 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

Looping

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 - Create different charts from each row of data

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

Results:


Create different charts for each column of data with column A being the labels:

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



来源:https://stackoverflow.com/questions/26674275/excel-macro-to-create-line-chart-excluding-columns-in-between

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!