- ベストアンサー
エクセル画像挿入マクロでずれる?エラーの原因と解決方法を解説
- エクセル2003で挿入する画像がマクロ実行時に少しずれることがあります。
- また、実行時エラー'-2147024809(80070057)'が発生する場合もあります。
- マクロで画像の挿入や位置・幅の調整をする際に注意すべきポイントを解説します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
良く分かりませんが、第一引数の msoFalse を msoTrue にすればどうなるでしょうか? Selection.ShapeRange.ScaleHeight 0.43, msoTrue, msoScaleFromTopLeft Selection.ShapeRange.ScaleWidth 0.48, msoTrue, msoScaleFromTopLeft 下記マクロも試してください。 補正値は調整(加減、大小)してください。 Sub test2() Dim pic As Picture Dim pth As String Dim pname As Variant Dim rng As Range Dim i As Integer pth = "C:\Users\note\Desktop\テスト材料\jpg変換済み\材料\" pname = Array("2-小", "2-大") Set rng = Range("B24:N54, O9:X54") '挿入開始セル範囲 For i = 0 To UBound(pname) Set pic = ActiveSheet.Pictures.Insert(pth & pname(i) & ".emf") With pic .Left = rng.Areas(i + 1).Left - 0.75 .Top = rng.Areas(i + 1).Top - 0.75 .ShapeRange.LockAspectRatio = msoFalse '縦横比を無視 .Height = rng.Areas(i + 1).Height + 1.5 .Width = rng.Areas(i + 1).Width + 1.5 End With Next i End Sub
その他の回答 (2)
- xls88
- ベストアンサー率56% (669/1189)
>回答番号:No.1 この回答への補足 質問1) ActiveSheet.Pictures.Insert("C:\Users\note\Desktop\テスト材料\jpg変換済み\材料\2-小.emf").Select With Selection .Left = Range("B24").Left .Top = Range("B24").Top End With Selection.ShapeRange.IncrementLeft 0.75 Selection.ShapeRange.IncrementTop 0.75 Selection.ShapeRange.ScaleHeight 0.43, msoFalse, msoScaleFromTopLeft Selection.ShapeRange.ScaleWidth 0.48, msoFalse, msoScaleFromTopLeft ActiveSheet.Pictures.Insert("C:\Users\note\Desktop\テスト材料\jpg変換済み\材料\2-大.emf").Select With Selection .Left = Range("O9").Left .Top = Range("O9").Top End With Selection.ShapeRange.IncrementLeft 0.75 Selection.ShapeRange.IncrementTop 0.75 Selection.ShapeRange.ScaleHeight 0.43, msoFalse, msoScaleFromTopLeft Selection.ShapeRange.ScaleWidth 0.48, msoFalse, msoScaleFromTopLeft 質問2) 次のシートをActiveにする Sheet("Sheet2").Activate 質問3) 下記コードで数値を変えてみる Selection.ShapeRange.IncrementLeft 0.75 Selection.ShapeRange.IncrementTop 0.75 Selection.ShapeRange.ScaleHeight 0.43, msoFalse, msoScaleFromTopLeft Selection.ShapeRange.ScaleWidth 0.48, msoFalse, msoScaleFromTopLeft 下記マクロを試してみてください。 詳細がよく分からないので挿入位置とか適当に決めています。 Sub test1() Dim pic As Picture Dim pth As String Dim pname As Variant Dim rng As Range Dim i As Integer pth = "C:\Users\note\Desktop\テスト材料\jpg変換済み\材料\" pname = Array("2-小", "2-大") Set rng = Range("B2:H12") '挿入開始セル範囲 For i = 0 To UBound(pname) Set pic = ActiveSheet.Pictures.Insert(pth & pname(i) & ".emf") With pic .Left = rng.Left .Top = rng.Top .ShapeRange.LockAspectRatio = msoTrue '縦横比維持 .Height = rng.Height '高さ基準 '.Width = rng.Width '幅基準 End With Set rng = rng.Offset(12) '挿入位置を12行下方にずらす Next i End Sub
お礼
度々ありがとうございます。 質問1・2(2つの画像挿入と次のシートへ移動)は理解できました。 どうしても質問3の幅調整がうまくいきません(位置調整はうまくいきそうです) >Selection.ShapeRange.ScaleHeight 0.43, msoFalse, caleFromTopLeft の値を0.434にすると足らず(狙いより6ピクセル程小さい)、 0.435にすると一気に伸びます(狙いより6ピクセル程大きい)。0.001倍の差で何故ここまで違うのかわかりません。 横のほうも 0.475と0.476で同じような感じです。自分なりにずっと調べているのですが理解力が乏しいのか解決できません。 >下記マクロを試してみてください。 位置はファイル2-小 をB24:N54へ 2-大をO9:X54に挿入したいので Set rng = Range("B24:N54", "O9:X54")としたのですが駄目でした。 取りあえず単体でどうなるかと思い、2-小を Set rng = Range("B24:N54")としてみましたが、指定どおりきました。しかし、僅かに左と上によっている感じです(カーソールを右と下を一回ずつ押し右と下の幅を狭めればよい感じでした・・・セルの枠線が太いのですが半分消えてる感じです) 画像にラインが数本あり、セルの枠線と合わせないといけない為、微調整が必要となります。(一度うまくいけば、ライン位置などはすべて同じですので大丈夫です)その為、質問1で回答頂いたマクロの方がうまくできるのであれば微調整しやすいかもしれません・・・ど素人の発想ですが。 あと少しで解決できそうです。お力をお貸しください。
- xls88
- ベストアンサー率56% (669/1189)
セルを指定すればどうでしょうか。 Dim pic As String pic = "C:\Users\○○○\Pictures\AAA.jpg" With ActiveSheet.Pictures.Insert(pic).ShapeRange .Left = Range("B2").Left .Top = Range("B2").Top End With 一度、現状のマクロを提示していただくことはできないでしょうか。
お礼
ありがとうございます。 2つのシート各2つの画像を挿入しましたが、1つ目のシートの2つ目で ”指定した名前のアイテムが見つかりませんでした”と表示されそれ以降挿入されません。 下記がマクロです。よろしくおねがいします。仕事がはかどらず困っています。(文字制限があるので後半削除します) Sub Macro2() ' Macro2 Macro ' マクロ記録日 : 2009/7/10 ユーザー名 : note ' Keyboard Shortcut: Ctrl+Shift+A Range("B24").Select ActiveSheet.Pictures.Insert("C:\Users\note\Desktop\テスト材料\jpg変換済み\材料\2-小.emf"). _ Select ActiveWindow.SmallScroll Down:=75 Selection.ShapeRange.IncrementTop 0.75 Selection.ShapeRange.ScaleHeight 0.43, msoFalse, msoScaleFromTopLeft ActiveWindow.SmallScroll Down:=-18 Selection.ShapeRange.ScaleWidth 0.48, msoFalse, msoScaleFromTopLeft ActiveWindow.SmallScroll Down:=-18 Range("P33").Select ActiveSheet.Shapes("Picture 201").Select Selection.ShapeRange.IncrementLeft 0.75 ActiveWindow.SmallScroll Down:=6 Range("O41").Select ActiveWindow.SmallScroll Down:=-18 Range("O9").Select ActiveSheet.Pictures.Insert("C:\Users\note\Desktop\テスト材料\jpg変換済み\材料\2-大.emf"). _ Select ActiveWindow.SmallScroll Down:=96 Selection.ShapeRange.IncrementTop 0.75 ActiveWindow.LargeScroll ToRight:=1 Selection.ShapeRange.IncrementLeft 0.75 ActiveWindow.SmallScroll Down:=-42 Selection.ShapeRange.ScaleWidth 0.43, msoFalse, msoScaleFromTopLeft
補足
マクロをくんで・・と質問しましたが表現が間違っていました。 組むほどの知識はありません。記録のスタートで作成しているレベルです。もっと勉強します。とりあえず回答いただいた物を挿入し指定の場所に挿入ができました。 ただ、 質問1) 同シートにもう1つの画像を挿入するときには同すればよいのか?(連続で回答していただいた物を貼り付けましたがエラーになります) 質問2) 次のシートに挿入するにはどうすればよいのか? 質問3) 挿入した画像の位置(右に1、下に1つずらす・・カーソールの→や下を1回押す・)や縦横の幅調整はどのようにすればよいのか? 取り急ぎこの3つが理解できればどうにかなりそうです。 こちらも勉強をしてみますが何分急いでいますので教えていただけたら助かります。
お礼
ありがとうございます。 >msoFalse を msoTrue は同結果でした。 再度教えていただいたマクロでOKでした。とても時間短縮でき大感激です。本当にありがとうございました。