[[20230301094102]] 『特定範囲の図形の削除』(りょうま) ページの最後に飛ぶ

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

 

『特定範囲の図形の削除』(りょうま)

お世話になります。A列〜E列にある図形(オートシェイプ)の削除をしたいのですが、以下で行うと「指定したコレクションに対するインデックスが境界を越えている」となります。わかりやすくご教示いただけると幸いです。

今のところ、A〜E列には5個の図形、F列には1つの図形(オートシェイプ)があります。よろしくお願いいたします。

Sub test()
Dim i As Long
Dim myIntersect As Range

With ActiveSheet

  For i = 1 To .Shapes.Count
    Set myIntersect = Intersect(.Shapes(i).TopLeftCell, .Columns("A:E"))
        If myIntersect Is Nothing Then
          MsgBox "なにもありません"
            Else
              .Shapes(i).Delete
        End If
  Next i
End With

End Sub

< 使用 Excel:Microsoft365、使用 OS:Windows11 >


 For i = .Shapes.Count To 1 Step -1
のようにしないと、図形削除によって順序に不整合が生じることが原因じゃないですか?

# 範囲外のときのメッセージがこれでよいのか、とか
# Autoshapeであることの確認が必要じゃないかとか。(入力規則やメモやいろいろな変種のShapeがあります)
# 気になるところはありますが。
(abc) 2023/03/01(水) 09:53:24


 シェイプの数で制御ではなくシェイプそのものを扱うのではどうだろうか?
 Sub test()
    Dim i               As Integer
    Dim WK_Shape        As Shape
    Dim myIntersect     As Range
    With ActiveSheet
        For Each WK_Shape In .Shapes
            Set myIntersect = Intersect(WK_Shape.TopLeftCell, .Columns("A:E"))
            If Not myIntersect Is Nothing Then
                WK_Shape.Delete
                i = i + 1
            End If
        Next
    End With
    If i = 0 Then
        MsgBox "なにもありません"
    End If

(ねむねむ) 2023/03/01(水) 10:16:21


 End Sub
 のコピーし忘れていた。
 最後に付け加えておいてくれ。
(ねむねむ) 2023/03/01(水) 10:21:51

abcさん

おっしゃるとおりですね。forの書き方はもちろん、それ以外にも検討すべきことがありました。アドバイスを元に修正ができました。ありがとうございました。

ねむねむさん

いただいたコードでできました。ありがとうございます。一つだけ教えてください。このiの働きとはなんでしょうか?個数?i = i + 1以外にiが登場する場所がなく、???なのです。

(りょうま) 2023/03/01(水) 15:24:19


 図形を削除した回数を数えておいて最後にその回数が0だった場合にメッセージを出すため。

 最初のものだと図形を削除していてもメッセージが出るため、一回も削除をしていない場合にだけ表示させるために
 使っている。

 と書いていて、削除したかしないかの判断なのでBoolean型でとっておいてあらかじめ
 Trueを代入して起き、削除をしたらFalseを代入、最後にTrueならばメッセージ表示、
 のほうが良かったかも。
(ねむねむ) 2023/03/01(水) 15:31:09

ねむねむさん

わたし、For Nextと勘違いをしておりました。本当にごめんなさい。ご説明も理解できました!!ありがとうございました。
(りょうま) 2023/03/01(水) 17:03:31


コメント返信:

[ 一覧(最新更新順) ]


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