きっかけは
現在、エクセルで、選択したグラフの大きさや縦横軸を統一するマクロを作成... - 教えて!goo
このスレッドだったんですが、ちょっと追加検証してみました。
(下記コードの内容)
新規シートにShapeを3コ追加します。
順番に名前をRect1、Rect2、Rect3、とつけます。
Rect2、Rect1、Rect3、の順番で選択して、選択した順番を保持するかどうかテストしてみます。
そのままSelectionをLoopした場合、
こんな結果です。
期待するのはRect2、Rect1、Rect3、なんですが、どうにも不思議な結果です...
Selectionを一旦変数に受けたらどうなるか。
Excel2003では期待通りに取れてるようですが、2007とはやはりバージョンによる違いが出てます。
2007はtest1とtest2の結果が同じなので、まあ、首尾一貫してると言えば言えるのかも。
追加テストでtest2直後、選択した状態でもう一度下記For Eachでのテストを実行すると
って結果です。
あまりニーズがない案件でしょうけど、何かの時に参考に...
...ならないか X(
現在、エクセルで、選択したグラフの大きさや縦横軸を統一するマクロを作成... - 教えて!goo
このスレッドだったんですが、ちょっと追加検証してみました。
(下記コードの内容)
新規シートにShapeを3コ追加します。
順番に名前をRect1、Rect2、Rect3、とつけます。
Rect2、Rect1、Rect3、の順番で選択して、選択した順番を保持するかどうかテストしてみます。
Sub test1() Dim i As Long Dim s As Object With Sheets.Add For i = 1 To 3 .Shapes.AddShape(msoShapeRectangle, 100, 100 * i, 100, 50).Name = "Rect" & i Next .Shapes("Rect2").Select .Shapes("Rect1").Select False .Shapes("Rect3").Select False Debug.Print vbLf & "For To 1回目" For i = 1 To Selection.Count Debug.Print Selection.Item(i).Name Next Debug.Print vbLf & "For To 2回目" For i = 1 To Selection.Count Debug.Print Selection.Item(i).Name Next .Shapes("Rect2").Select .Shapes("Rect1").Select False .Shapes("Rect3").Select False Debug.Print vbLf & "For Each 1回目" For Each s In Selection Debug.Print s.Name Next Debug.Print vbLf & "For Each 2回目" For Each s In Selection Debug.Print s.Name Next End With End Sub
そのままSelectionをLoopした場合、
【Excel2003 test1】 For To 1回目 Rect2 Rect2 Rect3 For To 2回目 Rect1 Rect2 Rect3 For Each 1回目 Rect2 Rect1 Rect3 For Each 2回目 Rect1 Rect2 Rect3 【Excel2007 test1】 For To 1回目 Rect1 Rect2 Rect3 For To 2回目 Rect1 Rect2 Rect3 For Each 1回目 Rect2 Rect1 Rect3 For Each 2回目 Rect2 Rect1 Rect3
こんな結果です。
期待するのはRect2、Rect1、Rect3、なんですが、どうにも不思議な結果です...
Selectionを一旦変数に受けたらどうなるか。
Sub test2() Dim i As Long Dim s As Object Dim ss As Object With Sheets.Add For i = 1 To 3 .Shapes.AddShape(msoShapeRectangle, 100, 100 * i, 100, 50).Name = "Rect" & i Next .Shapes("Rect2").Select .Shapes("Rect1").Select False .Shapes("Rect3").Select False Set ss = Selection Debug.Print vbLf & "For To 1回目" For i = 1 To ss.Count Debug.Print ss.Item(i).Name Next Debug.Print vbLf & "For To 2回目" For i = 1 To ss.Count Debug.Print ss.Item(i).Name Next .Shapes("Rect2").Select .Shapes("Rect1").Select False .Shapes("Rect3").Select False Set ss = Selection Debug.Print vbLf & "For Each 1回目" For Each s In ss Debug.Print s.Name Next Debug.Print vbLf & "For Each 2回目" For Each s In ss Debug.Print s.Name Next End With Set ss = Nothing End Sub
【Excel2003 test2】 For To 1回目 Rect2 Rect1 Rect3 For To 2回目 Rect2 Rect1 Rect3 For Each 1回目 Rect2 Rect1 Rect3 For Each 2回目 Rect2 Rect1 Rect3 【Excel2007 test2】 For To 1回目 Rect1 Rect2 Rect3 For To 2回目 Rect1 Rect2 Rect3 For Each 1回目 Rect2 Rect1 Rect3 For Each 2回目 Rect2 Rect1 Rect3
Excel2003では期待通りに取れてるようですが、2007とはやはりバージョンによる違いが出てます。
2007はtest1とtest2の結果が同じなので、まあ、首尾一貫してると言えば言えるのかも。
追加テストでtest2直後、選択した状態でもう一度下記For Eachでのテストを実行すると
Sub test3() Dim s As Object Dim ss As Object Set ss = Selection For Each s In ss Debug.Print s.Name Next End Sub
【Excel2003 test3】 Rect1 Rect2 Rect3 【Excel2007 test3】 Rect2 Rect1 Rect3
って結果です。
あまりニーズがない案件でしょうけど、何かの時に参考に...
...ならないか X(