棒グラフがあり、各棒グラフがグラフのサブカテゴリの内訳を示す VBA で積み上げ縦棒グラフを作成しようとしています (図の右側を参照)。通常の棒グラフの場合、新しいシリーズを作成し、Values プロパティと XValues プロパティを設定するだけで済みました。サブカテゴリの値についてどのように伝えるかわかりません。
(出典: msecnd.net )
棒グラフがあり、各棒グラフがグラフのサブカテゴリの内訳を示す VBA で積み上げ縦棒グラフを作成しようとしています (図の右側を参照)。通常の棒グラフの場合、新しいシリーズを作成し、Values プロパティと XValues プロパティを設定するだけで済みました。サブカテゴリの値についてどのように伝えるかわかりません。
(出典: msecnd.net )
このようなタスクを開始する最も簡単な方法は、マクロレコーダーを使用して同等の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のメンバーを見ると、Source
inがで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経由でアクセスできないマイナーな機能がいくつかある場合があることに注意してください。)
積み上げ縦棒効果を作成するには、縦棒の下位区分ごとにシリーズを作成する必要があります。たとえば、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
セル参照の代わりにプログラムから直接値を使用して積み上げ列を作成するのに必要なのはこれだけです。