| 
    
     |  | こんばんは いつも掲示板で勉強させてもらっています。
 質問ですが、Excel2003でオートセイプの直線で三角形を作って展開図作成マクロを作りましたが、位置あわせのため図形を回転したい時があります。
 困ったことに1度回転すると作業が続けられなくなります。
 原因は回転すると三角形がバラけてしまうためのようです。
 そこで下記のコードで確かめました。
 1「準備」で三角形を2つ作ります。
 2「右回転」または「左回転」を実行してメッセージでズレを確認します。
 
 なぜ回転するとずれてしまうのでしょうか?
 Sub 準備()
 '三角形を2つ作る
 ActiveSheet.Shapes.AddLine(100, 100, 100, 50).Select
 ActiveSheet.Shapes.AddLine(100, 50, 150, 30).Select
 
 '分かりやすいように3本目から色と名前を付ける
 With ActiveSheet.Shapes.AddLine(100, 100, 150, 30)
 .Name = "aLine"
 .Line.ForeColor.RGB = RGB(0, 255, 0)
 End With
 With ActiveSheet.Shapes.AddLine(150, 30, 180, 130)
 .Name = "bLine"
 .Line.ForeColor.RGB = RGB(0, 0, 255)
 End With
 With ActiveSheet.Shapes.AddLine(100, 100, 180, 130)
 
 .Name = "cLine"
 .Line.ForeColor.RGB = RGB(255, 0, 0)
 End With
 
 Application.Wait (Now + TimeValue("0:00:1"))
 'ズレを確認
 MsgBox ズレ
 End Sub
 Sub 右回転()
 'グループ化して名前を「グループ1」とする
 ActiveSheet.Shapes.SelectAll
 Selection.Group.Name = "Group1"
 
 '15度回転
 Shapes("Group1").Rotation = 15
 'グループ解除
 Shapes("Group1").Ungroup
 Application.Wait (Now + TimeValue("0:00:1"))
 'ズレを確認
 MsgBox ズレ
 End Sub
 
 Sub 左回転()
 ActiveSheet.Shapes.SelectAll
 Selection.Group.Name = "Group1"
 Shapes("Group1").Rotation = -15
 Shapes("Group1").Ungroup
 Application.Wait (Now + TimeValue("0:00:1"))
 MsgBox ズレ
 End Sub
 
 Function ズレ()
 With ActiveSheet
 With .Shapes("cLine")
 cTop = .Top
 cLeft = .Left
 End With
 With .Shapes("aLine")
 aBottom = .Top + .Height
 aLeft = .Left
 End With
 End With
 '取り敢えず赤い線と緑の線の接点を調べる
 If cLeft = aLeft And cLeft = aBottom Then
 ズレ = "ズレなし"
 Else
 ズレ = "ずれている!" & "aBottom" & aBottom & "<>" & "cTop" & cTop
 End If
 End Function
 
 ズレていると、前に作った三角形の3辺がどのような位置関係にあるかを調べ、次の三角形の頂点を反対方向に作るということが出ません。
 
 |  |