- 締切済み
EXCEL2007で、回転された図を任意の場所に設定できない
回転させた図を任意の場所に配置させたいのですが、EXCEL2007になってからShapeRange.Top/Leftに負の値が設定できなくなってしまったようで、任意の場所に配置できなくなってしまいました。 幸いIncrementTopやIncrementLeftには負の値が設定可能なようなのですが、Excel2003の場合とExcel2007の場合で動作が違うことには変わりなく、Excel2003ではTop/Leftの設定だけで済んだものがExce2007ではTop/Leftである程度の基準位置を設定したあと、さらにIncrementTop/IncrementLeftで補正の必要があるように思います。 こんなやり方をしないと図の配置はできないのでしょうか? 具体的には、マクロにて横長や縦長の長方形の図形を挿入し、位置を指定するのですが、図を回転した場合でもTop/Leftは、回転前の図のTop/Leftを設定するので、横長の図を90度回転させ縦長にした場合には、Leftに0を設定しても、回転後の結果の図は左端にはよっておらず、(元の図の横幅-元の図の縦幅)÷2の分だけ空いてしまいます。 なので、EXCEL2003では求められた空きの分だけLeftに負の値を設定するだけでよかったのですが、EXCEL2007ではLeftに負の値が設定できなくなっており、左端に寄せる事が不可能になっています。 以下、現象確認のための簡単なサンプルのマクロを示します。 '縦長の場合です ActiveSheet.Pictures.Insert("C:\TEMP\BITMAP.BMP").Select Selection.ShapeRange.LockAspectRatio = msoFalse Selection.ShapeRange.Height = 700 Selection.ShapeRange.Width = 100 Selection.ShapeRange.Rotation = 90# Selection.ShapeRange.Top = Range("B2").Top Selection.ShapeRange.Left = Range("B2").Left '横長の場合です ActiveSheet.Pictures.Insert("C:\TEMP\BITMAP.BMP").Select Selection.ShapeRange.LockAspectRatio = msoFalse Selection.ShapeRange.Height = 100 Selection.ShapeRange.Width = 700 Selection.ShapeRange.Rotation = 90# Selection.ShapeRange.Top = Range("B2").Top Selection.ShapeRange.Left = Range("B2").Left 内容はなんでもいいのでBITMAP.BMPという図のファイルを用意してください。 上記マクロは"B2"のセル位置が図形の左上を原点とするようにしたいのですが、全く違うところに図が配置されます。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- end-u
- ベストアンサー率79% (496/625)
こんにちは。 駄案に近いですが、一度 .CopyPicture してみるとか^ ^; Sub try() With ActiveSheet With .Pictures.Insert("C:\TEMP\BITMAP.BMP") With .ShapeRange .LockAspectRatio = msoFalse .Height = 700 .Width = 100 .Rotation = 90# End With .CopyPicture .Delete End With .Paste '.Range("B2")'直接指定なら以下不要 End With With Selection.ShapeRange .Top = .Parent.Range("B2").Top .Left = .Parent.Range("B2").Left End With End Sub
お礼
end-uさん、こんにちは ご回答ありがとうございます。 その通りなんですよ、回転させた後にコピーもしくは切り取りして貼り付けなおした場合には、図の原点が回転後の図の左上になるため、見たままの配置が可能なんですが、お察しの通り、貼り付けなおしているので図形書式で回転指定した角度が0になってしまいます。またご存知だとは思いますが、EXCELで図を回転させると図の品質が低下してしまうので、元に戻す事が出来ない状態です。 いろいろ調べた結果、.Top / .Leftである程度の位置に移動させてから、IncrementTopとIncrementLeftに必要となる負の値を指定し位置の補正をする事で目的の位置に移動させることができました。 どうやらEXCEL2007からは.Top/.Leftに負の値を設定することができなくなったようです。