- ベストアンサー
ExcelVBA:複数の特定のグラフを選択する方法
初心者です。ご指導をお願いします。 ブックに20枚程度のグラフシートがあります。 これらの設定をまとめて行いたいのですが、全てに同じではなく、このうちの一部のグラフシートを選んで設定したく思います。 例えば、1枚だけなら、 With Chart(5) 各種設定 End With でいいかもしれませんが、決まった複数シートを、Withの後ろにどのように書くか分かりません。 無理だとは思いつつも以下のように書きましたが失敗です。 With Charts(5),Charts(9),Charts(12) とか With Union(Charts(5),Charts(9),Charts(12)) とか。 説明が下手ですみません。イメージとしては上記のようなことです。 【質問1】このように複数の特定グラフシートを選択する方法をご存知の方、教えていただけませんか。 なお、今回は仕方が無いので以下のように処理しました。 Dim k As Integer For k=1 to Charts.Count Select Case k Case 5,9,12 Charts(k).PlotArea.Interior.ColorIndex=5 End Select Next k 【質問2】お詳しい方から見て、上記の処理方法は望ましいですか。一応意図したとおりに作動しました。 いろいろと調べてみましたが分かりませんでした。なにとぞご教示をお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Dim it As Chart For Each it In Charts(Array(5, 9, 12)) it.PlotArea.Interior.ColorIndex = 5 Next
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
20個のシートの内、プログラムで指定を固定して良いなら マクロの記録をとって見て色々試行して考えると Sub Macro2() Range("A1").Select Dim obj As Object ActiveSheet.Shapes.Range(Array("Chart 1", "Chart 2", "Chart 3")).Select For Each obj In Selection obj.Activate ActiveChart.PlotArea.Select Selection.Interior.ColorIndex = 6 'xlNone Next End Sub (1)Arrayで複数のシート内グラフを指定できる (2)それぞれのグラフを1つづつActivateしないとだめなので For Each Nextで繰り回すことが必要 との私なりの結論になりました。 (3)以上はグラフの名前でArray化してますが、Index番号でArray 化する方法は、質問者さんと同じ発想で Sub Macro4() Sheets("Sheet1").Activate Dim obj As Object For Each obj In ActiveSheet.ChartObjects Select Case obj.Index Case 1, 3 obj.Activate ActiveChart.PlotArea.Select Selection.Interior.ColorIndex = 6 ' xlNone End Select Next End Sub もっと簡潔な方法の回答が出るかもしれません。
お礼
早速のご回答有難うございます。 ちょっとトライしてみたところ、埋め込みグラフにおける処理をご教示いただいたのでしょうか。 私の質問文も言葉足らずだったかもしれませんが、グラフだけになってるシート(データ範囲を指定してF11で出来るもの)の処理を知りたかったのです。 でも、埋め込みグラフに関する部分も大変勉強になりました。Macro2、Macro4 とも、埋め込みグラフを試作してトライしてみました。しっかりと作動しました。有難うございます。 お礼ついでで恐縮ですが、もう一つだけお付き合いいただけませんか。 ご回答の Macro2 の冒頭で、A1をSelectしている理由は何でしょうか。 試しにこの一文をコメントブロックして実行しても作動しました。 お忙しいとは存じますが、よろしければ教えてください。
お礼
早速のご回答有難うございます。 まさにズバリのご回答でした。 Arrayを用いるのですね。 大変助かりました。有難うございます。