質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

850閲覧

Excelで、既存のグラフと同じ書式のグラフをたくさん作りたい。

nge2015

総合スコア7

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/04/13 02:47

編集2018/04/13 09:03

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
Microsoft Excel 2016にて、既に存在するグラフと同じ書式で、データ系列だけ異なる縦棒グラフをたくさん作ろうとしています。

発生している問題・エラーメッセージ

データ系列を変更すると、系列の塗りつぶしの書式が変わってしまいます(Excelのバグ?)。 そこで、塗りつぶしの書式を取得して、データ系列を変更して、 その後、取得した塗りつぶしを再度代入しようとしましたが、塗りつぶしの取得ができません。 ObjectThemeColorが正常に取得できず、0が返ってきてしまうようで、 データ系列の変更後に、これを代入しようとしたときにエラーが発生します。

該当のソースコード

Microsoft

1Private Type ChartFormatType 2 msoFill_ForeColor_ObjectThemeColor As MsoThemeColorIndex 3 msoFill_BackColor_ObjectThemeColor As MsoThemeColorIndex 4 msoFill_Pattern As MsoPatternType 5End Type 6 7Sub SetGraphDataSeries() 8 9 Dim lngCo As Long 10 For lngCo = 1 To 2 11 With wksGraph.ChartObjects(lngCo).Chart 12 13 Dim cft As ChartFormatType 14 15 Dim lngSeries As Long 16 For lngSeries = 1 To 1 '4 17 ' 書式の取得 18 With .SeriesCollection(lngSeries).Format 19 cft.msoFill_ForeColor_ObjectThemeColor = .Fill.ForeColor.ObjectThemeColor 20 cft.msoFill_BackColor_ObjectThemeColor = .Fill.BackColor.ObjectThemeColor 21 cft.msoFill_Pattern = .Fill.Pattern 22 End With 23 ' データ系列の変更 24 .SeriesCollection(1).Values = "='有意差まとめ(2)b'!$B$72:$B$79" 25 ' 書式の再設定 26 With .SeriesCollection(lngSeries).Format 27 .Fill.ForeColor.ObjectThemeColor = cft.msoFill_ForeColor_ObjectThemeColor 28 .Fill.BackColor.ObjectThemeColor = cft.msoFill_BackColor_ObjectThemeColor 29 Call .Fill.Patterned(cft.msoFill_Pattern) 30 End With 31 Next 32 33 34 End With 35 36 Next 37 38End Sub

試したこと

MsoThemeColorIndex変数であるObjectThemeColorの取得/設定だけではなく、
ひとつ上位階層のColorFormatオブジェクトのForeColorの取得/設定も試みました。
しかし、こちらはNewしようとしたときにエラーが発生します。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2018/04/13 07:45

系列の塗りつぶしの変更は、データ系列の書式設定で出来ると思います。 マクロの記録を有効にしておいて、データ系列の塗りつぶしの色を変えれば、その動作に対応するVBAプログラムが得られませんか?
nge2015

2018/04/13 09:00

早速どうも有り難うございます。既存のグラフと同じ書式のグラフを作るに当たって、グラフの各種プロパティの設定はできるのですが、既存のグラフのプロパティの取得ができずに困っています。自動記録マクロからは、どうすればプロパティが取得できるか、分かりませんので。
guest

回答1

0

ベストアンサー

ExcelだけでなくMS Office全般に言えることですが、色の指定方法にはいくつか種類があります。

今回使用しているObjectThemeColorは「テーマの色」を使って色を指定したい場合に使用するものです。

テーマの色

また、ObjectThemeColorから0が返ってきたとのことですが、
MsoThemeColorIndex列挙型の中で該当するものを探すとmsoNotThemeColor、テーマの色では無いということになります。
そのため取得は出来てもどんな色かわからないので設定できない、ということになります。

テーマの色ではなく、純粋な色を取得・設定する場合はExcel.ColorFormatオブジェクトのRGBプロパティを使用します。

RGBプロパティの型はMsoRGBTypeとなっていますが、RGB関数などで取得できる色(Long型)を使えば大丈夫です。

投稿2018/04/13 09:33

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nge2015

2018/04/17 02:47

どうも有り難うございます! また、お返事遅くなってしまってすみません。 Fill.ForeColor.ObjectThemeColorを使用するのを諦め、 Fill.ForeColor.RGBを使用したところ、取得・設定ともにうまく行きました! テーマの色からグラフを塗りつぶしているはずなのに何故ObjectThemeColorとして取得できないかは 不明ですが、ともあれ、動作するようになりました。 どうも有り難うございます!
imihito

2018/04/21 02:25

こちらでもテーマの色を設定しても「ObjectThemeColorとして取得できない」現象を確認できました 実行中にテーマの色を設定してもダメだったので、グラフ特有の事情があるのかもしれません。 この挙動は知らなかったので勉強になりました、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問