web-dev-qa-db-ja.com

Excelマクロ/ vbaを使用してチャートシリーズの表示/非表示を切り替える

Excelで折れ線グラフ(グラフ)を作成しています。同じグラフに複数のデータ系列がプロットされています。

ボタン(またはチェックボックスなど)を押すことでこれらのシリーズの表示/非表示を切り替えることができるマクロ/ VBAソリューションを作成する必要があります

この図に似ています(手動でExcelメニューシステムから実行)

enter image description here

私はすべてのメンバー変数/メソッドを調べようとしました

https://msdn.Microsoft.com/EN-US/library/office/ff837379.aspx

しかし、あまり運がありませんでした。

私はのようなビットで遊んでみました

Charts("Chart1").SeriesCollection(1)

そして

Worksheets("Graphical Data").ChartObjects(1)

しかし、グラフオブジェクト(範囲外の添え字が表示される)を取得することも、個々のシリーズの表示/非表示を切り替えることができるメソッドを見つけることもできません。

何か案は?

7
unknownSPY

このような方法がわからないときはいつでも、マクロレコーダーの電源を入れます。

4つのシリーズのグラフがあり、Excel 2013のフィルター機能を使用して、マクロレコーダーの実行中に2番目のシリーズを非表示にして表示しました。

関連するコードは次のとおりです。

ActiveChart.FullSeriesCollection(2).IsFiltered = True
' series 2 is now hidden
ActiveChart.FullSeriesCollection(2).IsFiltered = False
' series 2 is now visible

シリーズのタイプ(行または列)は関係ありません。これはどのシリーズでも機能します。

17
Jon Peltier

お探しの物件はSeriesCollection.Format.Line.Visibleプロパティ。 Excelワークブックをすばやく作成し、単純なデータセット(1〜10)を追加し、シートSheet1に折れ線グラフ「グラフ2」を追加しました。

このコードはラインの可視性をオフにしました:

Option Explicit

Private Sub Test()
    Dim cht As Chart
    Dim ser As Series

    'Retrieve our chart and seriescollection objects'
    Set cht = Worksheets("Sheet1").ChartObjects("Chart 2").Chart
    Set ser = cht.SeriesCollection(1)

    'Set the first series line to be hidden'
    With ser.Format.Line
        .Visible = msoFalse
    End With

End Sub

同様に、ser.Format.Line.VisibleプロパティをmsoTrueに追加すると、線が再び表示されます。

チャート自体を取得するには、まずそれをアクティブにし、次にcht変数をActiveChartに設定する必要がありました。グラフの名前を表示するには、グラフを選択して名前ボックス(セルの値/数式を入力する場所の近く)を調べます。

更新

上記の方法を使用する場合、シリーズ名は凡例ボックスに残ります。凡例でSeriesCollectionの可視性プロパティを見つけることができませんでしたが、1つの回避策は、シリーズの名前を空の文字列に変更することです(これにより、シリーズが凡例から消えます)。見せたいシリーズ。

以下のコードは、凡例の線と系列名の表示を切り替えます。

Option Explicit

Private Sub Test()
    Dim cht As Chart
    Dim ser As Series

    'Retrieve our chart and seriescollection objects'
    Set cht = Worksheets("Sheet1").ChartObjects("Chart 1").Chart
    Set ser = cht.SeriesCollection(1)

    'Set the first series line to be hidden'

    With ser.Format.Line
        If .Visible = msoTrue Then
            .Visible = msoFalse
            ser.Name = vbNullString
        Else
            .Visible = msoTrue
            ser.Name = "Series 1"
        End If
    End With

End Sub

そして、.Format.Line.Visible = msoTrue設定することを忘れないでくださいser.Nameシリーズの名前に戻ります。

4
Soulfire

シリーズの表示をオン/オフにする簡単な方法があります。ソースデータにフィルターを使用します。次のように簡単に役立ちます。新しいウィンドウを挿入できます。 1つをソースデータシートに設定し、もう1つのウィンドウをチャートシートに設定します。次に、2つのウィンドウを並べて、両方を同時に表示します。ソースデータシートで必要なシリーズを同時にフィルターすると、別のシートに目的のシリーズが表示されます。

0