[[20200426000449]] 『VBAで空白の凡例を削除したいです。』(もも) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAで空白の凡例を削除したいです。』(もも)

【VBA】
アクティブシート上の全グラフにおいて、空白の系列を全て削除するマクロを実行したいです。

Sub Sample()

 Dim ch As ChartObject
 Dim i As Long

 For Each ch In ActiveSheet.ChartObjects
For i = 1 To ch.Chart.SeriesCollection.Count
If ch.Chart.SeriesCollection(i).Name = "" Then
ch.Chart.SeriesCollection(i).Delete
End If
Next i
Next ch
 End Sub

上記のコードを標準モジュールに記入したところ、If ch.Chart.SeriesCollection(i).Name = "" Then
パラメータは無効ですというエラーが生じてしまいます。

このエラーの原因と解決方法および正しいコードをご教授いただきたいです。よろしくお願いします。

< 使用 Excel:Excel2016、使用 OS:unknown >


逆に向きにループしてください。 Step -1

もしくは、

For each を使用してください。

ところで、空白の系列と空白の凡例が同じ意味なのでしょうか?

(マナ) 2020/04/26(日) 07:34


(回答ではありません)

系列の名前が""になるのはどんな場合なんでしょうか。
指定しなかった場合は、Excel側が系列1、系列2などを補間していくはずなので、
そういうことがそもそもあるのかなあ、などと思っています。
空白じゃなく、特定の系列名の系列を指定したいということであれば、
わかりますが。

また、n番目の系列の凡例だけ消すのであれば、
chart.Legend.LegendEntries(n)
のようなコードになりますね。(マクロ記録によります)
(γ) 2020/04/26(日) 10:18


マナさん
返信ありがとうございます。

Sub Sample()

Dim ch As chartobject

For Each ch In ActiveSheet.ChartObjects

If ch.Chart.SeriesCollection.Name = "" Then
ch.Chart.SeriesCollection.delete

 End If
 Next ch
End Sub

For eachを使用してもエラーが生じてしまいます…。
(もも) 2020/04/26(日) 10:37


γさん
返信ありがとうございます。

例えば、系列1神奈川県、系列2東京都、系列3静岡県というグラフから、系列1男、系列2女というグラフにシフトした際に、系列3部分が空白になってしまいます。

他にも、項目を変えて様々なグラフを作成する処理をしたいので、空白の系列を削除するマクロを作成しようとしています。

(もも) 2020/04/26(日) 10:43


For eachとは、こういう意味でした。
 Dim ser As Series
 For Each ser In ch.Chart.SeriesCollection

(マナ) 2020/04/26(日) 10:56


低順位で結構ですので、お知らせ下さい。

>グラフにシフトした際に、系列3部分が空白になってしまいます。
これはテンプレートグラフを使ってもそうなりますか?

(γ) 2020/04/26(日) 11:20


マナさん

Sub Sample()

 Dim ch As ChartObject
 Dim ser As Series

 For Each ch In ActiveSheet.ChartObjects
 For Each ser In ch.Chart.SeriesCollection
If ch.Chart.SeriesCollection.Name = "" Then
ch.Chart.SeriesCollection.delete
End If
Next ser
Next ch
 End Sub

このようなコードで間違いないでしょうか…?
(もも) 2020/04/26(日) 11:23


こうじゃないですか。

 If ser.Name = "" Then
    ser.Delete
 End If

(マナ) 2020/04/26(日) 11:30


上記の処理で削除できました!

また、系列が空白の場合、凡例を非表示にする(空白ではない場合は、凡例を表示する)という処理も行いたいのですが、

Sub Sample2()

 Dim ch As ChartObject
 Dim ser As Series

 For Each ch In ActiveSheet.ChartObjects
 For Each ser In ch.Chart.SeriesCollection
 If ser.Name = "" Then
    ser.Name.HasLegend = False
    Else
    ser.Name.HasLegend = True
    End If
Next ser
Next ch
 End Sub

上記のコードで実行はできるのですが、空白の系列が削除されません。度々申し訳ございませんがどなたか教えていただけますでしょうか…?
(もも) 2020/04/26(日) 19:27


>系列が空白の場合

とは、どういう場合でしょうか?
系列を削除( ser.Delete )したら、凡例も消えませんでしたか。

(マナ) 2020/04/26(日) 20:13


削除でなく非表示にしたかったのでしょうか。

 Sub test()
    Dim cho As ChartObject
    Dim ser As Series

    For Each cho In ActiveSheet.ChartObjects
        For Each ser In cho.Chart.FullSeriesCollection
            ser.IsFiltered = ser.Name = ""
        Next
    Next

 End Sub

(マナ) 2020/04/26(日) 20:31


解決しました!
親身に相談に乗ってくださってありがとうございました。
(もも) 2020/04/26(日) 20:46

結局、よくわからないまま???
解決したということなのでよいのですが。

(マナ) 2020/04/27(月) 18:40


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.