4

棒グラフがあり、各棒グラフがグラフのサブカテゴリの内訳を示す VBA で積み上げ縦棒グラフを作成しようとしています (図の右側を参照)。通常の棒グラフの場合、新しいシリーズを作成し、Values プロパティと XValues プロパティを設定するだけで済みました。サブカテゴリの値についてどのように伝えるかわかりません。

代替テキスト
(出典: msecnd.net )

4

3 に答える 3

4

このようなタスクを開始する最も簡単な方法は、マクロレコーダーを使用して同等のVBAをキャプチャし、タスクを手動で実行したときに何が起こるかを確認することです。

たとえば、これを記録しました(Excel XPで作成しましたが、それ以降のバージョンも同様である必要があります)。コードは記録されたとおりです。

Option Explicit

Sub Macro1()
'
' Macro1 Macro
' Macro recorded 09/07/2010 by MW
'

'
    Range("B4:D6").Select
    Charts.Add
    ActiveChart.ChartType = xlColumnStacked
    ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B4:D6"), PlotBy:= _
        xlRows
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
End Sub

上記を見ると、最初の行Range("B4:D6").Selectはさらに下に繰り返されているので、必要ありません。

次に、少しクリーンアップします。ここで、オブジェクトブラウザは非常に便利です。慣れていない場合は、VBAエディターでF2キーを押してみてください。上部のドロップダウンで[Excel]を選択してコンテキストを少し絞り込み、[クラス]リストの[グラフ]を確認します。Add[メンバー...]リストで選択すると、下のペインに次のように表示されます。

Function Add([Before], [After], [Count]) As Chart
    Member of Excel.Charts

したがって、チャートを返します。これは、コードの残りの部分で繰り返し参照されてCharts.Addいるチャートである必要があります。ActiveChartそのような複製は退屈です(そしてパフォーマンスに影響を与える可能性があります)ので、少しやり直します。演習のために、マクロを実行する前にターゲットデータを選択すると仮定します。これによりSelection、マクロの実行時にターゲットデータが選択されます。オブジェクトブラウザでChartのメンバーを見ると、SourceinがでSetSourceDataある必要があることは明らかですRange。これを試してみましょう:

Sub Macro1()
    With Charts.Add
        .ChartType = xlColumnStacked
        .SetSourceData Source:=Selection, PlotBy:=xlRows
        .Location Where:=xlLocationAsObject, Name:="Sheet1"
    End With
End Sub

Selection私のマシンでは動作しません-チャートがアクティブになるとおそらく変わると思います。したがって、チャートの操作を開始する前に、範囲をキャプチャする必要があります。

Sub CreateStackedColumnChartFromSelection()
Dim src As Range
    Set src = Selection
    With Charts.Add
        .ChartType = xlColumnStacked
        .SetSourceData Source:=src, PlotBy:=xlRows
        .Location Where:=xlLocationAsObject, Name:="Sheet1"
    End With
End Sub

そこから、あらゆる種類のカスタマイズを見つけて(オブジェクトブラウザを覚えておいてください!)、チャートを希望どおりに取得できるはずです。(Excelのバージョンによっては、VBA経由でアクセスできないマイナーな機能がいくつかある場合があることに注意してください。)

于 2010-07-09T08:30:53.020 に答える
2

積み上げ縦棒効果を作成するには、縦棒の下位区分ごとにシリーズを作成する必要があります。たとえば、4 つの動物園があるとします。マイアミ、アトランタ、ニューヨーク、ラスベガスにあるとします。また、ライオン、トラ、クマ、アザラシの 4 種類の動物がいます。そして、各動物の数と動物の総数を示す積み上げ列が必要です。

まず、このようにグラフの種類を xl3DColumnStacked に設定します。

ActiveChart.ChartType = xl3DColumnStacked

次に、各動物のシリーズを作成します。

ActiveChart.SeriesCollection.NewSeries

次に、Values プロパティを動物の値の配列に設定し、XValues プロパティを都市の名前の配列に設定します。したがって、最初のシリーズがライオンズであった場合、マイアミ、アトランタ、ニューヨーク、ラスベガスのライオンの数と、文字列「マイアミ」、「アトランタ」などを含む配列を含む配列を作成します。cityNames 配列はそれぞれに再利用されます。 Series ですが、lionCounts は明らかに毎回適切な配列に置き換えられます。すなわち、tigerCounts、bearCounts などです。

ActiveChart.SeriesCollection(1).Values = lionCounts
ActiveChart.SeriesCollection(1).XValues = cityNames

セル参照の代わりにプログラムから直接値を使用して積み上げ列を作成するのに必要なのはこれだけです。

于 2010-07-15T21:55:15.280 に答える