For each delete next 調べてみた
さて,前回の記事で結局Excelではどうなっているのか気になったので,調べてみようと思いました。
図形のIDを追っていけば,内部仕様が少しはわかるかな,という感じ。
さて,コレクションの仕組みから考えて妥当であろうというPowerpoint,Wordではこのような感じ。
このようにいくつか図形を置いておいて,
Sub test() Dim s As Shape Dim sht As Document: Set sht = ActiveDocument Dim i As Long: i = 1 Dim j As Long ActiveDocument.Paragraphs.Add For Each s In sht.Shapes For j = 1 To sht.Shapes.Count sht.Paragraphs(i + 1).Range.Text = sht.Paragraphs(i + 1).Range.Text & j & ":" & sht.Shapes(j).ID & "_" Next sht.Paragraphs.Add s.Delete i = i + 1 Next End Sub
ワードでなにも目印が無いところに書きこませるのとっても苦手です。
奇数の図形IDを持つ図形が消されずに取り残されていくさまがわかります。
さて,Excel。こっちはセルがあるから書くの楽。
Sub test() Dim s As Shape Dim sht As Worksheet: Set sht = ActiveSheet Dim i As Long: i = 1 Dim j As Long For Each s In sht.Shapes For j = 1 To sht.Shapes.Count sht.Cells(i, j) = "'" & j & ":" & sht.Shapes(j).ID Next s.Delete i = i + 1 Next End Sub
削除する部分に関しては,全く同じように書いているのにも関わらず,Excel側はきれいに小さいIDのものから消しています。
パワーポイントやワードでこのように消していくためには,Shapes(1)をずっと消していくという書き方に対する挙動をしているようですね。
そりゃあちゃんと消えるわ。
うん。
でも,
なんでExcelだけそうなの?
どういう仕組みなんでしょうね。。
コレクションに慣れたらむしろこっちのほうが気持ち悪い(;´▽`A``