アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excel2010を使って、時系列データから折れ線グラフを作成しています。
時系列データの元データ用テーブルがあり、そのテーブルのデータは毎日変動します。
それを元データとして、グラフ表示用のテーブルを作成しています。
ある条件の時だけ折れ線グラフを表示したくて(ようするに途中のいくつかの区間で
分断された折れ線グラフを表示したい)、表示用テーブルの折れ線グラフ用データ
の各セルには
(1) if( セル2>セル1, セル2,"")

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

A 回答 (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
    • good
    • 0

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,"")
の場合は別途考えなければなりません。
    • good
    • 0

残念ながら、完全な空白と同じにグラフ表示を再現する方法は、なさそうです。



後は、実際にゼロを置換で空白にするくらいでしょうか。値複写した元データを選択した状態で、置換のダイアログを起動し(Ctrl+H)、「オプション」ボタンから「セルの内容が完全に同一であるものを検索する」にチェックを入れた上で、「0」→「」(空白)と置換。入れないと、「10」→「1」などと置換してしまいます。

補間のプロットの設定については、参考URLを参照。

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!