• 締切済み

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"のセル位置が図形の左上を原点とするようにしたいのですが、全く違うところに図が配置されます。

みんなの回答

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

こんにちは。 駄案に近いですが、一度 .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

krkatsu
質問者

お礼

end-uさん、こんにちは ご回答ありがとうございます。 その通りなんですよ、回転させた後にコピーもしくは切り取りして貼り付けなおした場合には、図の原点が回転後の図の左上になるため、見たままの配置が可能なんですが、お察しの通り、貼り付けなおしているので図形書式で回転指定した角度が0になってしまいます。またご存知だとは思いますが、EXCELで図を回転させると図の品質が低下してしまうので、元に戻す事が出来ない状態です。 いろいろ調べた結果、.Top / .Leftである程度の位置に移動させてから、IncrementTopとIncrementLeftに必要となる負の値を指定し位置の補正をする事で目的の位置に移動させることができました。 どうやらEXCEL2007からは.Top/.Leftに負の値を設定することができなくなったようです。

関連するQ&A

  • VBAで画像を自動で切り替える方法

    Excelで棚割表を作っています。商品コードを打つとその商品の画像を自動で表示させたいのですが、雑誌を見ながらコードをアレンジしてほぼ完成したのですが、「プロシージャーが大きい」とエラーが出てマクロを実行出来ません。 画像は100個程度あり、先に別のマクロで貼り付けてあります。 Private Sub Worksheet_Change(ByVal Target As Range) Dim ファイル As String If Intersect(Target, Range("A4")) Is Nothing Then ActiveSheet.Shapes("画像").Delete ファイル = "C:\保存場所\" & Range("A4").Value & ".jpg" Range("B5").Select ActiveSheet.Pictures.Insert(ファイル).Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Top = ActiveCell.Top Selection.ShapeRange.Left = ActiveCell.Left Selection.ShapeRange.Height = 97 Selection.ShapeRange.Width = 52.5 Selection.ShapeRange.Rotation = 0# Selection.ShapeRange.IncrementLeft 1.5 Selection.ShapeRange.IncrementTop 1.5 Selection.Name = "画像" End If (中略) Dim ファイル98 As String If Intersect(Target, Range("U60")) Is Nothing Then Exit Sub ActiveSheet.Shapes("画像98").Delete ファイル98 = "C:\保存場所\" & Range("U60").Value & ".jpg" Range("V61").Select ActiveSheet.Pictures.Insert(ファイル98).Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Top = ActiveCell.Top Selection.ShapeRange.Left = ActiveCell.Left Selection.ShapeRange.Height = 97 Selection.ShapeRange.Width = 52.5 Selection.ShapeRange.Rotation = 0# Selection.ShapeRange.IncrementLeft 1.5 Selection.ShapeRange.IncrementTop 1.5 Selection.Name = "画像98" End Sub 省ける箇所や分割する方法などありましたら教えてください。

  • VBAのGroup化について

    お世話になります。以下のマクロがうまく動きません。 ------------------------------------------------- Dim objShp1 As Shape For Each objShp1 In ActiveSheet.Shapes If objShp1.Name = "Picture 3" Then ActiveSheet.Shapes.Range(Array("A", "B", "Picture 3")).Select Selection.ShapeRange.Group.Select Selection.ShapeRange.ThreeD.RotationX = -180 Selection.ShapeRange.IncrementLeft 0 Selection.ShapeRange.IncrementTop 0 Else ActiveSheet.Shapes.Range(Array("A", "B")).Select Selection.ShapeRange.Group.Select <---------(1) Selection.ShapeRange.ThreeD.RotationX = -180 Selection.ShapeRange.IncrementLeft 0 Selection.ShapeRange.IncrementTop 0 End If Next ------------------------------------------------- このマクロは全体の一部分になりますが、(1)のところでエラーになります。 どこが間違っているのか、さっぱりわかりません。 すみませんが、お助けいただければ幸いです。

  • Excel-VBA コメントの書式設定

    Excel-VBA コメントの書式設定 コメントの書式設定をExcel-VBAで定義したい。 従い「マクロの記録」を実行して下記のソースコードを取得しました。 これを実行すると次の実行エラーが発生しました!? ★正常に動作させるソースコードの事例をいただければ幸いです。 ご指導よろしくお願いいたします。 実行時エラー'438' オブジェクトは、このプロパティまたはメソッドをサポートしていません。 Sub Macro1() ' 処理:マクロの記録 ' 目的:「コメントの挿入」と「コメントの書式設定」をする。 Range("A2").Select Range("A2").AddComment Range("A2").Comment.Visible = False Range("A2").Comment.Text Text:="コメント" & Chr(10) & "今日は良いお天気ですね。" '▽次で実行エラーが起きる!? Selection.ShapeRange.ScaleWidth 1.58, msoFalse, msoScaleFromTopLeft Selection.ShapeRange.ScaleHeight 1.49, msoFalse, msoScaleFromTopLeft Selection.ShapeRange.Fill.Visible = msoTrue Selection.ShapeRange.Fill.Solid Selection.ShapeRange.Fill.ForeColor.SchemeColor = 9 Selection.ShapeRange.Fill.Transparency = 0# Selection.ShapeRange.Line.Weight = 0.75 Selection.ShapeRange.Line.DashStyle = msoLineSolid Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Line.Transparency = 0# Selection.ShapeRange.Line.Visible = msoTrue Selection.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0) Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255) Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Height = 141.75 Selection.ShapeRange.Width = 283.5 Range("A1").Select End Sub

  •  エクセルに写真を挿入するマクロを組んでいます。

     エクセルに写真を挿入するマクロを組んでいます。 2003までは問題なく動作していたマクロが、 2007では位置調整がうまく行きません。  そこでネットで検索して With Selection .Left = Range("C6").Left .Top = Range("C" & rowa).Top End With のように Selection.Left を使えば解決するとありましたが、 (1)WIN VISTAのエクセル2007では おなじひとつのエクセルファイルの あるシートではコード通りが位置でるのに 違うシートでは縦位置がずれる。 (2)WIN XPのエクセル2007では すべてのシートで縦位置がずれる。 ただし、ずれの位置は(1)よりは少ない。 といずれのOSでも不具合が出ます。  事情によりエクセル2007でこのマクロを使用しなければならなくなり 非常に困っております。 どなたか解決方法をご存知の方、よろしくお願いします。  なお、(2)のWIN XPでは、エクセル2003も入っており、 その中では、全く問題なくマクロが動作しています。 実際のコードは下の通りです。 Sub 写真呼出(koumoku, jpgf, tr As Variant) Dim rowa As String ActiveWindow.ScrollColumn = 1 ActiveWindow.ScrollRow = tr ←選択したセルの行ナンバー ActiveSheet.Pictures.Insert(motopath & "写真\" & koumoku & "\" & jpgf & ".JPG").Select Selection.Name = "写真" Selection.ShapeRange.LockAspectRatio = msoTrue '縦横比の固定 Selection.ShapeRange.Height = 480 'Selection.ShapeRange.IncrementLeft 100 ←不具合が出たので止めた部分 'Selection.ShapeRange.IncrementTop 40  ←不具合が出たので止めた部分 rowa = tr + 2 With Selection .Left = Range("C6").Left .Top = Range("C" & rowa).Top End With End Sub

  • エクセル2007のマクロで画像挿入がうまくいきません。

    エクセル2007のマクロで画像挿入がうまくいきません。 写真のサイズ縦横比がセルにあっていないので伸びてしまいます。 下記のプログラムでサイズ変更も可能でしょうか? フォームのボタンの上に張り付けた場合、ボタンを隠す事は 出来ますか? ボタンの色は変更できるのでしょうか? いろいろわがままな質問で申し訳ありません。 マクロ初心者です。 Sub Pic_in2007() fname = Application.GetOpenFilename ActiveSheet.Pictures.Insert(fname).Select Selection.ShapeRange.LockAspectRatio = msoFalse Selection.ShapeRange.Height = range("B5:C6").height Selection.ShapeRange.Width = range("B5:C6").width Selection.ShapeRange.left = range("B5:C6").left Selection.ShapeRange.top = range("B5:C6").top End Sub

  • Word2007マクロ

    宜しくお願い致します Word2007でこんな事が出来ますか Excel2007で線路を作るマクロを作成しました(本を見て) これをWordでも使用したいのですが、Excelのマクロそのまま WordのVisual Basicに書き込んでもエラーが出て機能しません Excelのマクロは以下です Sub 線路作成() 上端位置 = Selection.Top 左端位置 = Selection.Left  Selection.ShapeRange.Line.Weight = 6# Selection.ShapeRange.Line.Visible = msoTrue Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Duplicate.Select Selection.ShapeRange.IncrementLeft -18# Selection.ShapeRange.IncrementTop 9.6 Selection.ShapeRange.Line.DashStyle = msoLineDash Selection.ShapeRange.Line.Weight = 4.5 Selection.ShapeRange.Line.Visible = msoTrue Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Line.ForeColor.SchemeColor = 9 Selection.ShapeRange.Line.Visible = msoTrue Selection.Top = 上端位置 Selection.Left = 左端位置 End Sub Wordで使えるようにするには、どこを直せばよいでしょうか。

  • オートシェイプの位置

    エクセルですが。 セレクトされているオートシェイプを所定の位置に配置するマクロとして、以下は動作するのですが。 Selection.ShapeRange.Left = 250 Selection.ShapeRange.Top = 100 名前ボックスからオートシェイプの名前を aaa に変更し、以下のマクロを実行すると、いずれもエラーになってしまいます。 aaa.ShapeRange.Left = 250 aaa.ShapeRange.Top = 100 aaa.Left = 250 aaa.Top = 100 どこが間違っているのでしょうか?

  • EXCEL2003で図を回転→EXCEL2000で開くと・・・

    EXCEL2003で「図の回転」設定をしたファイルは、 EXCEL2000以下では正常に表示されないようです。 ハンドルは回転していますが、当の図や写真は元のままです。古い形式で保存してもダメでした。 ファイルの受取人の環境がOFFICE XP でない場合は、 元画像をペイント等で回転させたものを貼り付ける等、やはり作り直すしか方法はないのでしょうか。 あきらめが悪く申し訳ありませんが、何か方法があればご教授ください。

  • ワード2002で「 Selection.ShapeRange.Left 」 が設定できない

    こんにちは。 OSはWinXP Pro、OfficeXPを使用しています。 1ページ目にあるグループ化された図形をページを 追加して貼り付けていくマクロを以前質問したので すが、ShapeRange.Leftの代入がうまくいきません。 ******************************************** Sub 図形追加() Dim siTop As Single Dim siLeft As Single Selection.HomeKey unit:=wdStory ActiveDocument.Shapes("Group 1478").Select siTop = Selection.ShapeRange.Top siLeft = Selection.ShapeRange.Left Selection.Copy Selection.EndKey unit:=wdStory Selection.InsertBreak Type:=wdPageBreak Selection.GoTo What:=wdGoToPage, _ Which:=wdGoToNext Selection.Paste Selection.ShapeRange.Top = siTop Selection.ShapeRange.Left = siLeft Selection.HomeKey unit:=wdLine End Sub ******************************************** 上述の値を追っていくと、 siTop=40.25、siLeft=46が入っているのですが、 下から2段目のShaperange.Leftを実行すると そこには-785.05 という数値が入ってしまいます。 (どこからその数値がでてきたのか????) Shaperange.Topはうまくいくのですが、ステートメント の実行順を変えてもうまくいきません。 どなたか解決策のご教授をお願いします。

  • 画像をアクティブセルの左上隅に配置し任意のセルに

    画像をアクティブセルの左上隅に配置し任意のセルにその画像ファイル名を自動で入力したいです やりたいことは以下になります 例えば画像をアクティブセル(D2)の左上隅に貼り付けて 貼り付けた画像のファイル名をC2に自動で入力をしたいです ファイル名に関しては拡張子も明記するコードとしないコード二つご教授して頂けると大変嬉しいです 下記のコード二つを組み合わせればできそうなんですが どのようにしたらいいのか分かりません よろしくお願いします Sub 図形挿入() Dim FilePath As Variant FilePath = Application.GetOpenFilename(",*.png") If Not FilePath = False Then ActiveSheet.Pictures.Insert(FilePath).Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Width = Selection.ShapeRange.Width * 1# Selection.ShapeRange.Left = ActiveCell.Left + 2.25 Selection.ShapeRange.Top = ActiveCell.Top + 2.25 With Selection.ShapeRange.Line .Weight = 2.25 '線の太さを2.25に .ForeColor.RGB = RGB(255, 0, 0) '赤枠に End With End If End Sub Sub ファイル名をセルに入力() Dim OpenFileName As String Dim tmp As Variant OpenFileName = Application.GetOpenFilename(FileFilter:="画像 ,*.png; *.jpg; *.gif; *.bmp", Title:="ファイルの選択") If OpenFileName <> "False" Then tmp = Split(OpenFileName, "\") Range("C2").Value = tmp(UBound(tmp)) End If End Sub

専門家に質問してみよう