メリルは、線が負の値を表すときに、線が負になった時点で線の色が変わるように折れ線グラフを作成する方法があるかどうかを尋ねました。たとえば、特定のデータ系列では、線が正の値を表す限りは青になりますが、線が負の値を表す場合は赤に変わります。

残念ながら、Excelでこれを簡単に行う方法はありません。ただし、試すことができるいくつかの回避策があります。 1つ目は、マクロを使用して、負の値を表すグラフの線の色を変更することです。次のマクロは、そのようなアプローチの例です。

Sub PosNegLine()

Dim chtSeries As Series     Dim SeriesNum As Integer     Dim SeriesColor As Integer     Dim MyChart As Chart     Dim R As Range     Dim i As Integer     Dim LineColor As Integer     Dim PosColor As Integer     Dim NegColor As Integer     Dim LastPtColor As Integer     Dim CurrPtColor As Integer

PosColor = 4 'Green     NegColor = 3 'red     SeriesNum = 1

Set MyChart = ActiveSheet.ChartObjects(1).Chart     Set chtSeries = MyChart.SeriesCollection(SeriesNum)

Set R = GetChartRange(MyChart, 1, "Values")



For i = 2 To R.Cells.Count         LastPtColor = IIf(R.Cells(i - 1).Value < 0, NegColor, PosColor)

CurrPtColor = IIf(R.Cells(i).Value < 0, NegColor, PosColor)



If LastPtColor = CurrPtColor Then             LineColor = LastPtColor         Else             If Abs(R.Cells(i - 1).Value) > Abs(R.Cells(i).Value) Then                 LineColor = LastPtColor             Else                 LineColor = CurrPtColor             End If         End If         chtSeries.Points(i).Border.ColorIndex = LineColor     Next i End Sub
Function GetChartRange(Ch As Chart, Ser As Integer, _   ValXorY As String) As Range     Dim SeriesFormula As String     Dim ListSep As String * 1     Dim Pos As Integer     Dim LSeps() As Integer     Dim Txt As String     Dim i As Integer

Set GetChartRange = Nothing

On Error Resume Next         SeriesFormula = Ch.SeriesCollection(Ser).Formula     ListSep = ","

For i = 1 To Len(SeriesFormula)

If Mid$(SeriesFormula, i, 1) = ListSep Then             Pos = Pos + 1             ReDim Preserve LSeps(Pos)

LSeps(Pos) = i         End If     Next i

If UCase(ValXorY) = "XVALUES" Then         Txt = Mid$(SeriesFormula, LSeps(1) + 1, LSeps(2) - LSeps(1) - 1)



Set GetChartRange = Range(Txt)

End If

If UCase(ValXorY) = "VALUES" Then         Txt = Mid$(SeriesFormula, LSeps(2) + 1, LSeps(3) - LSeps(2) - 1)



Set GetChartRange = Range(Txt)

End If End Function

グラフを選択してからPosNegLineマクロを実行すると、グラフが調べられ、負のデータポイント値の間の線分について、線の色が赤に変わります。正のデータポイントを接続する線分の場合、線の色は緑に設定されます。

このソリューションの問題は、近似値しか提供しないことです。 2つのデータポイントを結ぶ線でのみ機能し、線分全体を変更することも、変更しないこともできます。開始データポイントが正で終了データポイントが負の場合、負の値に渡されるときに線の色を正しく変更することはできません。

別のアプローチは、データポイントが正か負かに基づいて、異なる色または形状としてデータポイントをフォーマットすることです。これを実現する方法については、Jon PeltierのWebサイト(

)で詳しく説明されています。

http://www.peltiertech.com/Excel/Charts/ConditionalChart1.html

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(1999)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。

link:/ excelribbon-Positive_and_Negative_Colors_in_a_Chart [チャートの正と負の色]