6

X 値がテキストで、Y 値が数値であるグラフがいくつかあります。バーの Y 値がゼロ未満の場合は各バーを赤く、ゼロ以上の場合は緑に色付けします。また、バーの X 値が「NET CHANGE」の場合、バーを黄色にする必要があります。ここで、以前の StackOverflow スレッドの指示に従いました:カテゴリ ラベルに基づいて VBA を使用してバーの色を変更します

実行時エラー 451 プロパティ let プロシージャが定義されておらず、プロパティ get プロシージャがオブジェクトを返しませんでした。

私のコードは以下の通りです:

For chartIterator = 1 To ActiveSheet.ChartObjects.count

    For pointIterator = 1 To ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator).Chart.SeriesCollection(1).Points.count
        If ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator).Chart.SeriesCollection(1).Values(pointIterator) >= 0 Then
            ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator).Chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _
                RGB(146, 208, 80)
        Else
            ActiveWorkbook.Sheets("Due To Chart").ChartObjects(chartIterator).Chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _
                RGB(255, 0, 0)
        End If
    Next pointIterator

Next chartIterator

エラーはIFステートメントで発生します。.Points(pointIterator).Value も試しましたが、「このオブジェクトにはプロパティまたはメソッドが定義されていません」というエラーが表示されました。

私が間違っていることについて何か考えはありますか?

よろしくお願いします。

4

2 に答える 2

6

繰り返し処理できる配列として扱っている SeriesCollection(1).Values の使用で問題が発生しています。代わりに、これは SeriesCollection 内のポイントの値を返す関数です。

必要なのは、関数の結果を配列変数に代入し、配列を繰り返し処理して、配列内の値がゼロより大きいか小さいかをテストすることです。次に、チャート ポイントに色を割り当てることができます。

このコードはトリックを行う必要があります:

    Sub color_chart()

    Dim chartIterator As Integer, pointIterator As Integer, _
        seriesArray() As Variant

    For chartIterator = 1 To ActiveSheet.ChartObjects.Count
        seriesArray =  ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator). _
                       chart.SeriesCollection(1).Values

        For pointIterator = 1 To UBound(seriesArray)             

           If seriesArray(pointIterator) >= 0 Then
               ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator). _  
               chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _
               RGB(146, 208, 80)
           Else
               ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator). _
               chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _
               RGB(255, 0, 0)
           End If

        Next pointIterator

    Next chartIterator

    End Sub
于 2012-12-13T21:23:47.933 に答える
3

これは、VBA を必要とせず、式が更新されると動的に機能する別の方法です。このチュートリアルの「条件付き書式付き棒グラフ」の例を確認してください。

Excel グラフの条件付き書式

于 2013-01-15T03:25:43.140 に答える