0

好吧,我一直在绞尽脑汁,为傻瓜阅读 excel 编程,并四处寻找,但我正在为我在这里遇到的这个小问题感到压力。我对 vba 编程或任何编程语言都是全新的,但我正在尽力掌握它。

场景和我的目标是:

下图是我从不同流站获得的一长串数据的示例。该样本仅包含两个(niobrara 和蛇)来说明我的问题,但实际上我有超过 80 个站的数据,每个站的压力期数量都不同(B 栏)。

COLUMN A,是站名列。COLUMN B,应力期数 COLUMN C,模拟速率 COLUMN D,估计速率

我一直试图弄清楚的是如何制作一个宏来循环遍历站名(A列),并为每个唯一的站名组制作一个图表,该图表将在组的右侧弹出,例如E 列区域。

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

现在我的主要考验是,我不知道如何让宏区分站名,使用与该名称相关的所有数据制作图表,然后循环到下一个站组并创建一个对应于的图表并继续循环遍历 A 列中的所有 80 多个电台名称,并在其右侧制作相应的 80 多个图表,例如 COLUMN E。

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

干杯。

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

在此处输入图像描述

4

1 回答 1

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
于 2012-10-02T08:12:01.380 回答