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

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

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

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

Q&A

解決済

1回答

1983閲覧

VBAでグラフの特定要素を色付けしたい

izuki_y

総合スコア65

VBA

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

0グッド

0クリップ

投稿2020/06/29 00:52

お世話になっております。
表題の件で質問をさせてください。

環境:
Windows 10 Pro x64
Excel 2016

前回の質問を元にVBAでグラフ作成までを完成させました。
VBAでグラフを作るとExcelが落ちる

グラフの元
グラフの結果

特定の文字("ここではProduct10"の色を変更したいです。
イメージ説明

ソースは以下の様になります(修正を加えたため色々プロパティ変更のソースも入っています)

VBA

1Option Explicit 2Sub AddGraph() 3 4 'グラフの対象データ範囲を定義 5 Dim trgtSh As Worksheet 6 Set trgtSh = ThisWorkbook.Worksheets("Sheet1") 7 Dim dataRng As Range 8 Set dataRng = trgtSh.Range("A1:B16") 9 10 'グラフを貼り付けたいセルを定義 11 Dim pasteRng As Range 12 Set pasteRng = trgtSh.Range("D2") 13 14 'グラフの対象データをソートする(昇順) 15 With trgtSh 16 .Sort.SortFields.Clear 17 .Sort.SortFields.Add Key:=.Range("B1"), Order:=xlAscending '第1優先 18 .Sort.SortFields.Add Key:=.Range("A1"), Order:=xlAscending '第2優先 19 .Sort.SetRange dataRng 'ソートの範囲 20 .Sort.Header = xlNo '最初のセルをヘッダ固定にするかどうか 21 .Sort.Apply 22 End With 23 24 'グラフ編集 25 With trgtSh.Shapes.AddChart2.Chart 26 27 'グラフの種類を指定(ここでは「集合縦棒」) 28 .ChartType = xlColumnClustered 29 'グラフの対象データ範囲を指定 30 .SetSourceData dataRng 31 32 33 Dim tmp As Variant, I As Long 34 tmp = .SeriesCollection(1).Values 35 36 For I = 1 To UBound(tmp) 37 '系列内で"Product10"の要素だけ色を変える 38 '.SeriesCollection(1).Points(1).Interior.ColorIndex = 3 '&H0000FF 39 Next I 40 41 'グラフの貼り付け位置を指定 42 .Parent.Top = pasteRng.Top 43 .Parent.Left = pasteRng.Left 44 End With 45End Sub

真ん中にあるPrduct10を検索する方法が分からずに困っております。
ご教授お願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Pointsコレクションの中から使えそうなプロパティがあればそれを基に検索すればいいのですが、私にはわかりませんでした。

代わりにシート上からProduct10を検索し、その行番号を要素位置として使うサンプルです。

VBA

1Dim f As Range 2Set f = Columns(1).Find(what:="Product10", LookAt:=xlWhole) 3Shapes(1).Chart.SeriesCollection(1).Points(f.Row).Interior.ColorIndex = 3 '&H0000FF

投稿2020/06/29 02:01

ttyp03

総合スコア16996

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

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

izuki_y

2020/06/29 05:40 編集

ご回答ありがとうございます。 こちらの方法でやりたい事が出来ましたありがとうございます。 別回答として下記の方法でもできました。 Dim tmp As Variant, I As Long tmp = .SeriesCollection(1).XValues 'X軸の要素 For I = 1 To UBound(tmp) '系列内で"Product10"の要素だけ色を変える If InStr(tmp(I), "Product10") > 0 Then With .SeriesCollection(1).Points(I) .Interior.ColorIndex = 3 '&H0000FF End With Next I
ttyp03

2020/06/29 05:39

XValues で参照できたのですね。 勉強になります。
izuki_y

2020/06/29 05:42

Markdownが上手くいかずに何回も編集しまくったので通知がめちゃくちゃ飛んできてたら申し訳ございません(汗)
ttyp03

2020/06/29 05:44

いえ、大丈夫ですよい。飛んできてません。 コメント欄の編集は通知が来ないみたいです。 ちなみにコメント欄だとMarkdownつかえません。不便ですねぇ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問