Excel VBA:图表制作宏将循环通过唯一的名称组并创建相应的图表?

时间:2012-10-02 06:48:14

标签: loops excel-vba charts vba excel

好吧,我一直在绞尽脑汁,为傻瓜读取excel编程,然后到处寻找,但我正在强调我在这里遇到的这个小问题。我是vba编程的新手,或者是任何编程语言的新手,但我正在尽我所能来处理它。

情景以及我的目标:

下面的图片是我从不同流媒体站获得的大量数据的示例。样本只有两个(niobrara和蛇)来说明我的问题,但实际上我有80多个站点的数据,每个都有不同的压力期(COLUMN B)。

COLUMN A,是站名列。 栏目B,压力期数 COLUMN C,模拟率 栏目D,估计费率

我一直在努力弄清楚如何制作一个循环遍历电台名称(COLUMN A)的宏以及每个UNIQUE电台名称组,制作一个将弹出到组右侧的图表,在COLUMN E区域。

图表非常简单,只需要两个系列的散点图/折线图;一个系列,COLUMN B为x值,COLUMN C为y值;另一系列需要COLUMN B作为x值,COLUMN D作为y值。

现在我的主要考验是,我不知道如何使宏区分站名,使用与该名称相关的所有数据来制作图表,然后循环到下一个站组并创建图表这对应于此,并继续循环通过COLUMN A中的所有80多个电台名称,并在像COLUMN E这样的地方将相应的80+图表放在它的右边。

如果我有足够的积分来“赏金”,我会心跳加速。但是,既然我没有,那么任何可以解决我的困境的人都会真诚地感谢我帮助我理解顺利地解决这个问题,希望将来能更好地理解这样的情景。如果有更多信息我需要澄清以使我的问题更容易理解,请评论您的查询,我很乐意更详细地解释该主题。

干杯。

哦,还有额外的功劳;现在我考虑一下,我手动输入了COLUMN B中的数字。因为循环需要使用该列作为x值,所以如果它可以循环通过自己并在它之前自己填充该列就很重要图表(我想它会与“计算与站名相对应的行”这样简单的事情有关。但同样,我不知道与站名相对应的正确术语,因此我发现了泡菜但是,如果经验丰富的资深程序员能够回答这个问题,我可以想象这样一段代码对于我所寻求的这样一个宏的成功是否足够简单而且至关重要。

enter image description here

1 个答案:

答案 0 :(得分:2)

试试这个

Sub MakeCharts()
    Dim sh As Worksheet
    Dim rAllData As Range
    Dim rChartData As Range
    Dim cl As Range
    Dim rwStart As Long, rwCnt As Long
    Dim chrt As Chart

    Set sh = ActiveSheet

    With sh
        ' Get reference to all data
        Set rAllData = .Range(.[A1], .[A1].End(xlDown)).Resize(, 4)
        ' Get reference to first cell in data range
        rwStart = 1
        Set cl = rAllData.Cells(rwStart, 1)
        Do While cl <> ""
            ' cl points to first cell in a station data set
            ' Count rows in current data set
            rwCnt = Application.WorksheetFunction. _
               CountIfs(rAllData.Columns(1), cl.Value)
            ' Get reference to current data set range
            Set rChartData = rAllData.Cells(rwStart, 1).Resize(rwCnt, 4)
            With rChartData
                ' Auto fill sequence number
                .Cells(1, 2) = 1
                .Cells(2, 2) = 2
                .Cells(1, 2).Resize(2, 1).AutoFill _
                   Destination:=.Columns(2), Type:=xlFillSeries
            End With
            ' Create Chart next to data set
            Set chrt = .Shapes.AddChart(xlXYScatterLines, _
               rChartData.Width, .Range(.[A1], cl).Height).Chart
            With chrt
                .SetSourceData Source:=rChartData.Offset(0, 1).Resize(, 3)
                ' --> Set any chart properties here

                ' Add Title
                .SetElement msoElementChartTitleCenteredOverlay
                .ChartTitle.Caption = cl.Value

                ' Adjust plot size to allow for title
                .PlotArea.Height = .PlotArea.Height - .ChartTitle.Height
                .PlotArea.Top = .PlotArea.Top + .ChartTitle.Height

                ' Name series'
                .SeriesCollection(1).Name = "=""Modeled"""
                .SeriesCollection(2).Name = "=""Estimated"""

                ' turn off markers
                .SeriesCollection(1).MarkerStyle = -4142 
                .SeriesCollection(2).MarkerStyle = -4142 

            End With

            ' Get next data set
            rwStart = rwStart + rwCnt
            Set cl = rAllData.Cells(rwStart, 1)
        Loop

    End With

End Sub