0

さて、私は頭を悩ませ、ダミーのための優れたプログラミングを読み、あちこちを見回してきましたが、私はここで抱えているこの小さな問題について強調しています。私はvbaプログラミング、または実際にはあらゆるプログラミング言語に完全に慣れていませんが、それを理解するために最善を尽くしています。

シナリオと私の目標は次のとおりです。

下の写真は、私がさまざまなストリームステーションから持っている膨大な長さのデータのサンプルです。サンプルには、私の問題を説明するために2つ(niobraraとsnake)しかありませんが、実際には、ストレス期間の量がそれぞれ異なる80ステーション相当のデータがあります(列B)。

列Aは、ステーション名の列です。COLUMN B、ストレス期間番号COLUMN C、モデル化されたレートCOLUMN D、推定レート

私が理解しようとしているのは、ステーション名(COLUMN A)をループするマクロを作成し、ステーション名のUNIQUEグループごとに、グループの右側にポップアップするチャートを作成する方法です。 COLUMNEエリア。

チャートは完全に単純で、2つのシリーズ散布図/折れ線グラフが必要です。x値としてCOLUMNB、y値としてCOLUMNCを持つ1つのシリーズ。他のシリーズでは、x値としてCOLUMN B、y値としてCOLUMNDが必要です。

今の私の主な試練は、マクロでステーション名を区別し、その名前に関連するすべてのデータを使用してチャートを作成し、次のステーショングループにループして、に対応するチャートを作成する方法がわからないことです。それと、COLUMN Aの80以上のステーション名すべてをループし続け、COLUMNEのような場所でその右側に対応する80以上のチャートを作成します。

これを「バウンティ」するのに十分なポイントがあれば、私はハートビートになります。しかし、私はそうしていませんので、私のジレンマを解決できる人は誰でも、この問題をスムーズに実行することを理解するのを助けてくれたことに心から感謝します。質問をより理解しやすくするために明確にする必要のある情報が他にある場合は、質問にコメントしてください。この件について詳しく説明させていただきます。

乾杯。

ああ、そして追加のクレジットのために; 考えてみると、列Bに手動で数値を入力しました。ループはその列をx値として使用する必要があるため、ループを作成する前に、ループをループしてその列を自分で埋めることができるかどうかが重要になります。チャート(「駅名に対応する行を数える」という単純なものと関係があると思いますが、やはり駅名に対応する適切な用語がわからないので、ピクルスI ' 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 に答える