Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4866 / 13644 ツリー ←次へ | 前へ→

【53938】Excelのグラフの系列の削除について sophia 08/2/16(土) 22:22 質問[未読]
【53939】Re:Excelのグラフの系列の削除について ichinose 08/2/16(土) 22:55 発言[未読]
【53940】Re:Excelのグラフの系列の削除について sophia 08/2/16(土) 23:47 質問[未読]
【53941】Re:Excelのグラフの系列の削除について VBWASURETA 08/2/17(日) 3:54 回答[未読]
【53943】Re:Excelのグラフの系列の削除について sophia 08/2/17(日) 7:42 お礼[未読]
【53942】Re:Excelのグラフの系列の削除について VBWASURETA 08/2/17(日) 4:46 回答[未読]

【53938】Excelのグラフの系列の削除について
質問  sophia  - 08/2/16(土) 22:22 -

引用なし
パスワード
   こんにちは。下記のプログラムのように散布図の系列を1以外全て消したいの
ですが、グラフによっては「SeriesCollectionオブジェクトが失敗しました」
というエラーが発生します。
ある系列が存在するかどうかチェックする方法があれば教えてください


Dim index as integer,GraphNum as integer

For Each ch In ActiveSheet.ChartObjects
  ch.Activate
  GraphNum = ActiveChart.SeriesCollection.Count
    
  For index = 2 To GraphNum Step 1
    ActiveChart.SeriesCollection(index).Delete
  Next index
Next

【53939】Re:Excelのグラフの系列の削除について
発言  ichinose  - 08/2/16(土) 22:55 -

引用なし
パスワード
   ▼sophia さん:
こんばんは。
>こんにちは。下記のプログラムのように散布図の系列を1以外全て消したいの
>ですが、グラフによっては「SeriesCollectionオブジェクトが失敗しました」
>というエラーが発生します。
>ある系列が存在するかどうかチェックする方法があれば教えてください
>
>
>Dim index as integer,GraphNum as integer
>
>For Each ch In ActiveSheet.ChartObjects
>  ch.Activate
>  GraphNum = ActiveChart.SeriesCollection.Count
>    
>  For index = 2 To GraphNum Step 1
>    ActiveChart.SeriesCollection(index).Delete
>  Next index
>Next
削除は、インデックスの大きい数から小さい数に向かって
削除してみてください。

Sub main()
  Dim ch As ChartObject
  Dim cht As Chart
  Dim index As Integer, GraphNum As Integer
  For Each ch In ActiveSheet.ChartObjects
    Set cht = ch.Chart
    GraphNum = cht.SeriesCollection.Count
    For index = GraphNum To 2 Step -1
     cht.SeriesCollection(index).Delete
     Next index
    Next
   Set ch = Nothing
   Set cht = Nothing
End Sub

【53940】Re:Excelのグラフの系列の削除について
質問  sophia  - 08/2/16(土) 23:47 -

引用なし
パスワード
   こんばんは回答ありがとうございます。
動かすことができました。
インデックスの大きい方からやるとどうして
うまくいくのでしょうか?

>削除は、インデックスの大きい数から小さい数に向かって
>削除してみてください。
>
>Sub main()
>  Dim ch As ChartObject
>  Dim cht As Chart
>  Dim index As Integer, GraphNum As Integer
>  For Each ch In ActiveSheet.ChartObjects
>    Set cht = ch.Chart
>    GraphNum = cht.SeriesCollection.Count
>    For index = GraphNum To 2 Step -1
>     cht.SeriesCollection(index).Delete
>     Next index
>    Next
>   Set ch = Nothing
>   Set cht = Nothing
>End Sub

【53941】Re:Excelのグラフの系列の削除について
回答  VBWASURETA  - 08/2/17(日) 3:54 -

引用なし
パスワード
   ▼sophia さん:
こんばんは。

削除するということは、

>>    GraphNum = cht.SeriesCollection.Count

の.Countが変わるからではないでしょうか?

最大8個として

インデックス:12345678

1つ削除するということは

インデックス:1234567

このイメージかなっと思いますけど違います?
昇順にループするとインデックスがずれますが、

降順だと後ろから削除するのでずれることがないからだと思います。

【53942】Re:Excelのグラフの系列の削除について
回答  VBWASURETA  - 08/2/17(日) 4:46 -

引用なし
パスワード
   ▼sophia さん:

簡単にイメージしやすいのを思いつきました!!

だるま落としです。
常に叩いている位置(Index)は同じでも叩いている
円柱(例;1〜8)は違いますよね?
(For Nextの+Stepによって)叩く位置をずらしてしまいるために
エラーになるという感じなのでしょうね。

【53943】Re:Excelのグラフの系列の削除について
お礼  sophia  - 08/2/17(日) 7:42 -

引用なし
パスワード
   ▼ichinose様
▼VBWASURETA様

丁寧でわかりやすい回答ありがとうございます。
おかげさまで解決致しました。

4866 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free