• 締切済み

Excel2010で分断された折れ線グラフをかく

Excel2010を使って、時系列データから折れ線グラフを作成しています。 時系列データの元データ用テーブルがあり、そのテーブルのデータは毎日変動します。 それを元データとして、グラフ表示用のテーブルを作成しています。 ある条件の時だけ折れ線グラフを表示したくて(ようするに途中のいくつかの区間で 分断された折れ線グラフを表示したい)、表示用テーブルの折れ線グラフ用データ の各セルには (1) if( セル2>セル1, セル2,"") か (2) if( セル2>セル1, セル2,NA()) という式を入れています。 (1)のケースだと、常にY軸の0にグラフの線が接続され、上下が連続された折れ線 グラフになってしまいます。 (2)のケースだと最後の#N/Aデータの区間はグラフが表示されないのですが、 途中の#N/Aデータの区間は、補完されて連続したグラフ表示になってしまいます。 (分断されない) 表示用のセルを式もデータも入れない、何も設定されていない状態にすれば、 意図したように分断された折れ線グラフになります。 分断したい箇所は、その都度変動しますので、いつも手動でセルの内容を 消去するわけにはいかないので、うまい方法があればどなたかアドバイスを お願いします。 Excel2003では 「メニューの[ツール]→[オプション]の[グラフ]タブで、「空白セルのプロット」の プロット方法を指定するときに、「プロットしない」を選択する」 とすると意図したグラフが表示されたのですが、2010でどう設定すればいいのか わかりません。

みんなの回答

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.3

式の戻り値が、#N/Aと""の両方に対応してみました。 尚、別シートで再計算があった場合も動作するようです。 特に影響が感じられなければ問題はないと思います。 取りあえず★1で該当シートがアクティブで無ければ回避するようにしています。 ★2の処、グラフ名は正しいものに書き換えてください。 Private Sub Worksheet_Calculate() Dim ser As Series Dim yrng As String Dim i As Long If ActiveSheet.Name <> Me.Name Then Exit Sub '★1 With Me.ChartObjects("グラフ 1") '★2 For Each ser In .Chart.SeriesCollection ser.Border.LineStyle = xlAutomatic ser.MarkerStyle = xlAutomatic dv = ser.values yrng = Split(ser.Formula, ",")(2) On Error Resume Next For i = 1 To ser.Points.Count With Range(yrng)(i) If .value = "" Or .value = "#N/A" Then ser.Points(i).MarkerStyle = xlNone ser.Points(i).Border.ColorIndex = xlNone ser.Points(i + 1).Border.ColorIndex = xlNone End If End With Next i On Error GoTo 0 Next End With End Sub

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

VBAでは駄目ですか? >(2) if( セル2>セル1, セル2,NA()) 上記式で#N/Aが返されている場合は線を「なし」に設定すれば良いと思います。 該当シートの見出しを右クリック>コードの表示 と進み現れるVBEのコードウインドウに下記コードをコピペしてください。 再計算が働いた場合実行されます。 Private Sub Worksheet_Calculate()     Dim ser As Series     Dim dv As Variant     Dim i As Long                          With ActiveSheet.ChartObjects(1)         For Each ser In .Chart.SeriesCollection             ser.border.LineStyle = xlAutomatic             ser.MarkerStyle = xlAutomatic             dv = ser.values             On Error Resume Next             For i = LBound(dv) To UBound(dv)                 If dv(i) = "" Then                     ser.Points(i + 1).border.ColorIndex = xlNone                 End If             Next i             On Error GoTo 0         Next     End With End Sub >(1) if( セル2>セル1, セル2,"") の場合は別途考えなければなりません。

回答No.1

残念ながら、完全な空白と同じにグラフ表示を再現する方法は、なさそうです。 後は、実際にゼロを置換で空白にするくらいでしょうか。値複写した元データを選択した状態で、置換のダイアログを起動し(Ctrl+H)、「オプション」ボタンから「セルの内容が完全に同一であるものを検索する」にチェックを入れた上で、「0」→「」(空白)と置換。入れないと、「10」→「1」などと置換してしまいます。 補間のプロットの設定については、参考URLを参照。

参考URL:
http://www.relief.jp/itnote/archives/003879.php

関連するQ&A