🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

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

Q&A

1回答

2080閲覧

excel 円グラフの自動配色

pulim

総合スコア15

VBA

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

0グッド

0クリップ

投稿2021/02/01 02:29

イメージ説明

図のような円グラフを凡例事にデータラベルの編集(分類名、値、%表示、太字、10.5サイズ)、グラフカラーを表の色に着色するマクロを作成したのですが、
開始するとデータラベルは表の最後の値となり、データラベルを抽出した「DL = .Text」が空白となってしまい、「インデックスが有効範囲にありません」とエラーが出てしまいます。

問題点は
①データラベルが全て表最後の値になってしまう。
②「インデックスが有効範囲にありません」のエラー表示

上記2点の改善点はどこなのでしょうか。
ご教示お願い致します。

Sub color() Dim n As Integer Dim c As Object, a As Object, pt As Object, color As Object Dim dt As Variant Dim DL As String For Each c In ActiveChart.FullSeriesCollection With c With .Format.Line .Visible = msoTrue .ForeColor.ObjectThemeColor = msoThemeColorBackground1 .ForeColor.TintAndShade = 0 .ForeColor.Brightness = 0 .Transparency = 0 End With Select Case .ChartType Case xlPie '円 For Each pt In .Points n = 2 'Debug.Print .Formula If pt.HasDataLabel = True Then With pt.DataLabel .ShowCategoryName = True .ShowPercentage = True .NumberFormat = "0.0%" .Format.TextFrame2.TextRange.Font.Bold = msoTrue .Format.TextFrame2.TextRange.Font.Size = 10.5 If .ShowCategoryName And .ShowPercentage And .ShowValue Then DL = .Text dt = Split(.Text, ",") For Each color In c.Points If dt(0) = Cells(2, n) Then pt.Interior.color = Cells(23, n).DisplayFormat.Interior.color n = n + 1 Else n = n + 1 End If Next End If End With End If Next Case Else End Select End With Next End Sub

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

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

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

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

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

guest

回答1

0

以下のコードではいかがでしょうか。

VBA

1Sub color改() 2 Dim rng As Range, city As String 3 Set rng = ActiveSheet.Range("B2:E2") 4 Dim c As Series, pt As Point 5 For Each c In ActiveChart.FullSeriesCollection 6 With c 7 If Not .ChartType = xlPie Then Exit For 8 9 With .Format.Line 10 .Visible = msoTrue 11 .ForeColor.ObjectThemeColor = msoThemeColorBackground1 12 .ForeColor.TintAndShade = 0 13 .ForeColor.Brightness = 0 14 .Transparency = 0 15 End With 16 17 For Each pt In .Points 18 If pt.HasDataLabel Then pt.DataLabel.Delete 19 pt.ApplyDataLabels xlDataLabelsShowValue, , , , , True, True, True 20 With pt.DataLabel 21 city = Split(.Text, ",")(0) 22 pt.Interior.Color = rng.Cells(1, WorksheetFunction.Match(city, rng, False)).DisplayFormat.Interior.Color 23 .NumberFormat = "0.0%" 24 .Format.TextFrame2.TextRange.Font.Bold = msoTrue 25 .Format.TextFrame2.TextRange.Font.Size = 10.5 26 End With 27 Next 28 29 End With 30 Next 31End Sub

投稿2021/02/07 06:52

jinoji

総合スコア4592

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問