Excel写真帳の写真を挿入マクロを教えて下さい

このQ&Aのポイント
  • Excelで工事写真帳での写真枠のダブルクリックで写真挿入のマクロを教えて下さい。
  • 現在Excel2013をメインに使用しています。今までExcel2003でExcelでの工事写真帳と資料用の写真帳をマクロで写真挿入枠をセルの結合で作成して、ダブルクリックで写真データ保存のフォルダを開いて写真の挿入をしていました。
  • Excel2013で使用するとデータ(工事写真帳と資料用の写真帳)を別のパソコンへ移動したりデータを第三者への提出したり、写真データの移動/削除するとリンクされたイメージを表示出来ません。リンクに正しいファイル名と場所が指定されていることを確認して下さい。
回答を見る
  • ベストアンサー

Excel写真帳の写真を挿入マクロを教えて下さい。

Excelで工事写真帳での写真枠のダブルクリックで写真挿入の マクロを教えて下さい。 使用パソコン 第1パソコン・Windows7・Excel2013 第2パソコン・WindowsXp・Excel2003 現在Excel2013をメインに使用しています。 今までExcel2003でExcelでの工事写真帳と資料用の写真帳をマクロで 写真挿入枠をセルの結合で作成して、ダブルクリックで写真データ保存の フォルダを開いて写真の挿入をしていました。 Excel2013で使用すると データ(工事写真帳と資料用の写真帳)を別のパソコンへ移動したり データを第三者への提出したり、写真データの移動/削除すると 下記のような状態(コメント)になります。 リンクされたイメージを表示出来ません。ファイルが移動または削除されたか、 名前が変更された可能性があります。リンクに正しいファイル名と場所が 指定されていることを確認して下さい。 状況は、たぶんリンク貼り付けになってしまう仕様に新Excelはなっている。 Excel 2010 で Pictures.Insert メソッドを使用して図をワークシートに 挿入すると図がリンク オブジェクトとして挿入される http://support.microsoft.com/kb/2396509/ja だと思っててます。 リンク回避もしくはマクロをどの様に変更したら良いのでしょうか。 使用しているマクロは下記です。(Excel2003で使用していたマクロ) よろしくご教授をお願いします。。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim fname As String Dim pos As Integer If Target.Column <> 2 Then Exit Sub If Target.Cells.count = 1 Then Exit Sub Cancel = True fname = Application.GetOpenFilename() If fname = "False" Then Exit Sub pos = InStrRev(fname, ".") If pos > 0 Then Select Case LCase(Mid(fname, pos + 1)) Case "jpeg" Case "jpg" Case "gif" Case Else Exit Sub End Select Else Exit Sub End If With ActiveSheet.Pictures.Insert(fname) .ShapeRange.LockAspectRatio = msoTrue .Height = Target.Height If .Width > Target.Width Then .Width = Target.Width End If .Top = Target.Top + (Target.Height - .Height) / 2 .Left = Target.Left + (Target.Width - .Width) / 2 End With End Sub

noname#176595
noname#176595

質問者が選んだベストアンサー

  • ベストアンサー
  • masatsan
  • ベストアンサー率15% (179/1159)
回答No.4

幅を合わせて、立てはその比率で拡大縮小ということですね。 うまく行くかわかりませんが Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim fname As String Dim pos As Integer If Target.Column <> 2 Then Exit Sub If Target.Cells.Count = 1 Then Exit Sub Cancel = True fname = Application.GetOpenFilename() If fname = "False" Then Exit Sub pos = InStrRev(fname, ".") If pos > 0 Then Select Case LCase(Mid(fname, pos + 1)) Case "jpeg" Case "jpg" Case "gif" Case Else Exit Sub End Select Else Exit Sub End If If Selection.Width > Target.Width Then w = Target.Width Else w = Selection.Width End If h = Selection.Height Set P = LoadPicture(fname) w = P.Width * 0.0378 h = P.Height * 0.0378 Set myshape = ActiveSheet.Shapes.AddPicture(Filename:=fname, _ LinkToFile:=True, SaveWithDocument:=True, Left:=Target.Left, _ Top:=Target.Top, Width:=w, Height:=h) With myshape .LockAspectRatio = msoTrue .Width = Selection.Width End With End Sub

noname#176595
質問者

お礼

皆様有り難うございました。 masatsan 様のマクロを使わせて頂きます。 使い慣れたマクロを使用したく思います。

noname#176595
質問者

補足

確認報告です。 マスターデータ形式、Excel2003形式(  .xls )を、Excel2013での作業。 作業A: 写真データを挿入後保存して画像データを削除し、保存データを 別のフォルダへ移動してファイルを開くという手順で確かめました。 写真データ:2816X2112 / 1600X1200 / 1920X1080 / 1920X1200 1. Excel2003形式をExcel2013で開き、このマクロを記録して Excel2003( .xls )形式で保存。 再度Excel2013で立ち上げ画像挿入後 Excel2003形式で保存。 作業Aをしましたが問題無く画像保存は出来ていました。 ●画像の比率も問題無く収まっていました。 2. Excel2003形式をExcel2013で開き、このマクロを記録して Excel2013 マクロ有効ブック( .xlsm )形式で保存。 再度Excel2013で立ち上げ画像挿入後 Excel2013マクロ有効ブック形式で保存。 作業Aをしましたが問題無く画像保存は出来ていました。 ●画像の比率も問題無く収まっていました。 masatsan 様、有り難うございました。 上記報告させて頂きます。 もう少し使いこんでみますね。

その他の回答 (4)

noname#176594
noname#176594
回答No.5

最近この質問が多いように思います。 わたくしも先月Excel2013を使用してこの現象でマクロを変更しました。 ご紹介のマクロは2通りあります。 Excel2013でのリンク回避出来ているマクロです。 ●マクロ1: (現在使用のマクロです。) 写真挿入結合セルの横幅を基準にサイズ調整されます。元写真サイズ比率を保つ。 Excel2013の場合 写真挿入結合セルをクリックで画像の挿入ウインドウが開きます。 (もう一度同一セルをクリックする場合、一旦他のセルクリック後再クリック) ファイルから/Office.com クリップアート/Bing イメージ検索Webを検索します の3つから選択してから挿入データ場所選択後、写真選択します。 Excel2003 の場合 図の挿入ウインドウが開きます。 ●マクロ2: 写真挿入結合セルをダブルクリックで画像の挿入ウインドウが開きます。 写真挿入結合セルの縦横幅に縮小して挿入されます。 結合セルのサイズは、きっちり元の写真縦横比率に合うよう作成必要。 横長の写真の場合は多少縦方向に伸びますが元写真の比率が一定の場合 素早く写真挿入出来ます。 Excel2013・Excel2003。 写真挿入結合セルをダブルクリックで画像の選択ウインドウが開きます。 マクロ説明: 写真挿入結合セルの指定 ●マクロ1:例 2 And Target.Rows.Count = 13 Then の場合、ご使用写真挿入結合セルの設定は 2 は、結合セル(写真挿入枠)の列数。 13 は、結合セル(写真挿入枠)の行数。 上記で結合セルを指定します。 ●マクロ2:例 全てのセルダブルクリックで画像の挿入ウインドウが開きます。 Sheet上に写真挿入結合セルのサイズが複数ある場合など便利です。 (結合セルのサイズは、きっちり元の写真縦横比率に合うよう作成必要。) ●マクロ1: ------------------------------ Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim dlgAnswer As Boolean, x As Object, MyWidth As Single, MyHeight As Single If Target.Columns.Count = 6 And Target.Rows.Count = 18 Then Application.ScreenUpdating = False MyWidth = Target.Width MyHeight = Target.Height dlgAnswer = Application.Dialogs(xlDialogInsertPicture).Show For Each x In ActiveSheet.Shapes With x If .Width > MyWidth Then .LockAspectRatio = msoTrue .Width = MyWidth .Line.ForeColor.SchemeColor = 64 .Line.Visible = msoTrue End If End With Next Application.ScreenUpdating = True End If End Sub ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ ●マクロ2: ------------------------------ Option Explicit Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) Dim myF As Variant Dim mySp As Object Dim myAD1 As String Dim myAD2 As String Dim myHH As Double Dim myWW As Double Dim myHH2 As Double Dim myWW2 As Double Cancel = True '===============画像選択 myF = Application.GetOpenFilename _ ("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False) If myF = False Then MsgBox "画像を選択してください(終了)" Exit Sub End If '===============画像の掃除 For Each mySp In ActiveSheet.Shapes myAD1 = mySp.TopLeftCell.MergeArea.Address myAD2 = Target.Address If myAD1 = myAD2 Then mySp.Delete Next '===============画像の貼り付け Set mySp = ActiveSheet.Shapes.AddPicture(Filename:=myF, LinkToFile:=False, _ SaveWithDocument:=True, Left:=Target.Left, Top:=Target.Top, _ Width:=0, Height:=0) '★ とりあえず 縦横0で。 mySp.ScaleHeight 1, msoTrue '★元のサイズに戻す mySp.ScaleWidth 1, msoTrue '★元のサイズに戻す '===============タテヨコの縮尺を保持 If mySp.Width > Target.Width Then mySp.Width = Target.Width If mySp.Height > Target.Height Then mySp.Height = Target.Height '===============中央へ調整 myHH2 = (Target.Height / 2) - (mySp.Height / 2) myWW2 = (Target.Width / 2) - (mySp.Width / 2) mySp.Top = Target.Top + myHH2 mySp.Left = Target.Left + myWW2 Set mySp = Nothing End Sub ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆

noname#176595
質問者

補足

確認報告です。 マスターデータ形式、Excel2003形式(  .xls )を、Excel2013での作業。 作業A: 写真データを挿入後保存して画像データを削除し、保存データを 別のフォルダへ移動してファイルを開くという手順で確かめました。 写真データ:2816X2112 / 1600X1200 / 1920X1080 / 1920X1200 ◆マクロ1の確認 1. Excel2003形式をExcel2013で開き、このマクロを記録して Excel2003( .xls )形式で保存。 再度Excel2013で立ち上げ画像挿入後 Excel2003形式で保存。 作業Aをしましたが問題無く画像保存は出来ていました。 ●画像の比率も問題無く収まっていました。 2. Excel2003形式をExcel2013で開き、このマクロを記録して Excel2013 マクロ有効ブック( .xlsm )形式で保存。 再度Excel2013で立ち上げ画像挿入後 Excel2013マクロ有効ブック形式で保存。 作業Aをしましたが問題無く画像保存は出来ていました。 ●画像の比率も問題無く収まっていました。 ◆マクロ2の確認 1. Excel2003形式をExcel2013で開き、このマクロを記録して Excel2003( .xls )形式で保存。 再度Excel2013で立ち上げ画像挿入後 Excel2003形式で保存。 作業Aをしましたが問題無く画像保存は出来ていました。 ■画像の比率は横長の場合写真枠いっぱいになり少し縦長になった。 写真挿入結合セルを使用する写真データの比率を固定すれば問題なしです。 (回答の記載通りでした。)。 2. Excel2003形式をExcel2013で開き、このマクロを記録して Excel2013 マクロ有効ブック( .xlsm )形式で保存。 再度Excel2013で立ち上げ画像挿入後 Excel2013マクロ有効ブック形式で保存。 作業Aをしましたが問題無く画像保存は出来ていました。 ■画像の比率は横長の場合写真枠いっぱいになり少し縦長になった。 写真挿入結合セルを使用する写真データの比率を固定すれば問題なしです。 (回答の記載通りでした。)。 xp9500 様 有り難うございました。  上記報告させて頂きます。 マクロ1はExcel2013の機能を有効活用出来そうです。

  • masatsan
  • ベストアンサー率15% (179/1159)
回答No.3

#1,2です。 2010を持っていないのでどうか分かりませんが 以下でどうでしょうか? Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim fname As String Dim pos As Integer If Target.Column <> 2 Then Exit Sub If Target.Cells.Count = 1 Then Exit Sub Cancel = True fname = Application.GetOpenFilename() If fname = "False" Then Exit Sub pos = InStrRev(fname, ".") If pos > 0 Then Select Case LCase(Mid(fname, pos + 1)) Case "jpeg" Case "jpg" Case "gif" Case Else Exit Sub End Select Else Exit Sub End If If Selection.Width > Target.Width Then w = Target.Width Else w = Selection.Width End If h = Selection.Height Set myshape = ActiveSheet.Shapes.AddPicture(Filename:=fname, _ LinkToFile:=True, SaveWithDocument:=True, Left:=Target.Left + (Target.Width - w) / 2, _ Top:=Target.Top + (Target.Height - h) / 2, Width:=w, Height:=h) With myshape .LockAspectRatio = msoTrue .Height = Selection.Height End With End Sub

noname#176595
質問者

補足

masatsan 様、有り難うございました。 Excel2013で確認しました。 問題無く写真の挿入出来ました。 ファイル移動(同一パソコン内ですが)と挿入データ削除しても 問題はありませんでした。 もう一つ教えて頂きたいのですが、 デジカメで写真データ、2816X2112、サイズを基本としています。 プリント時はL版サイズに合うよう写真挿入枠を作成しています。 2 Then Exit Subの2(B列)に設定しています。 1920X1080などの横長の写真の場合は縦長になってしまいます。 横長用にSheetを再作成すればすむ事ですが、 マクロで比率調整しての挿入のマクロは出来るのでしようか。 お返事頂ければ助かります。 よろしくお願いします。

  • masatsan
  • ベストアンサー率15% (179/1159)
回答No.2

#1です。 ごめんなさい。理由は分かっていた上に同じURLを貼ってしまいました。無視してください。 本当にごめんなさい。

  • masatsan
  • ベストアンサー率15% (179/1159)
回答No.1

Pictures.InsertはEXCEL2010以降リンクで貼られるとのこと。 Shapes.AddPicture を使えとなっています。 http://support.microsoft.com/kb/2396509/ja

関連するQ&A

  • Excel2010でのマクロによる画像貼付について

    エクセル2010で下記のマクロを実行し、一旦保存して再度開くと、 「リンクされたイメージを表示できません。ファイルが移動または削除されたか、名前が変更された可能性があります。リンクに正しいファイル名と場所が指定されていることを確認してください。」 と表示されます。 検索したところ、Pictures.Insertでなく、2010では、Shapes.Addを使用するとの事ですが、 マクロに詳しく無いため、どこを修正したらいいのかわかりません。 大量の写真貼り付けがあるので、教えて頂けると大変助かります。 どうぞよろしくお願いいたします。 Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) '===============起動の合図 If ActiveCell.FormulaR1C1 = "画像" Then Cancel = True '===============画像選択 SSS = Application.GetOpenFilename _ ("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False) If SSS = False Then MsgBox "画像を選択してください(終了)" Exit Sub End If '===============画像の貼り付け Set CCC = ActiveSheet.Pictures.Insert(SSS) '===============タテヨコの縮尺を保持 HH = Target.Height / CCC.Height WW = Target.Width / CCC.Width If HH > WW Then CCC.Height = CCC.Height * 0.99 CCC.Width = Target.Width * 0.99 Else CCC.Height = Target.Height * 0.99 CCC.Width = CCC.Width * 0.99 End If '===============中央へ調整 HH2 = (Target.Height / 2) - (CCC.Height / 2) WW2 = (Target.Width / 2) - (CCC.Width / 2) CCC.Top = Target.Top + HH2 CCC.Left = Target.Left + WW2 Set CCC = Nothing End If End Sub

  • エクセルに写真を挿入するVBA

    エクセルで写真集を作るためのVBAですが、以下のVBAでは画像がリンク貼り付けになってしまいます。どうしたらエクセルファイルに画像を貼りこみで保存できるのでしょうか? よろしくお願いいたします。 やりたいことは、まずダブルクリックでダイアログボックスを表示させ、挿入したい写真を選択、写真がセルに合わせた大きさに縮小、セルの中央に写真を配置。以上です。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _                     Cancel As Boolean)   Dim PicFile As Variant   Dim rX As Double, rY As Double   '[ファイルを開く]ダイアログボックスを表示   PicFile = Application.GetOpenFilename( _             "画像ファイル,*.jpg;*.jpeg;*.gif;*.tif;*.png;*.bmp")   If VarType(PicFile) = vbBoolean Then Cancel = True: Exit Sub   Application.ScreenUpdating = False      '画像を挿入   With ActiveSheet.Pictures.Insert(PicFile)     rX = Target.Width / .Width     rY = Target.Height / .Height     If rX > rY Then       .Height = .Height * rY     Else       .Width = .Width * rX     End If     'セルの中央(横方向/縦方向の中央)に配置     .Left = Target.Left + (Target.Width - .Width) / 2     .Top = Target.Top + (Target.Height - .Height) / 2   End With      Application.ScreenUpdating = True   Cancel = True End Sub

  • エクセル2007でマクロを使った写真挿入がうまくいきません。

    エクセル2007でマクロを使った写真挿入がうまくいきません。 エクセル2003で使っていたひな形をもらったのですが2007では結合したセルから ずれてしまいます。 どうすれば位置の修正をできますか? また、結合した大きなセルの中にフォームボタンを付けいるのですが 2003では写真が挿入されるとボタンは隠れてしまっていたのですが、 2007では挿入した写真に重ねって写真が見ずらいです。 隠すことはできるのでしょうか? なにぶん初心者なのでお願いします。 Sub Pic_in() ' マクロ記録日 : 2003/7/1 kome fname = Application.GetOpenFilename ActiveSheet.Pictures.Insert(fname).Select Selection.ShapeRange.LockAspectRatio = msoFalse Selection.ShapeRange.Height = 247.5 Selection.ShapeRange.Width = 350 End Sub

  • マクロで画像挿入の質問です

    マクロ 初心者です。 ワークシート指定して、ダブルクリック等を使っての画像選択、貼り付け&セルの大きさに合わせる)ことはできるのですが、 ダブルクリック等ではなく、手動でマクロを実行して指定のセル(B37)に貼り付けることはできるでしょうか?(セルの大きさに画像が変換するのは生かしたまま) Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)を sub マクロ名()にして、Moduleに貼り付けて実行したら myAD2 = Target.Address 上記場所でエラーになってしまいます。 どのように変更したら、できるでしょうか?または、できる手段はないのでしょうか? ご教授お願いします。 使用ベースマクロは以下です。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True '===============画像選択 myF = Application.GetOpenFilename _ ("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False) If myF = False Then MsgBox "画像を選択してください(終了)" Exit Sub End If '===============画像の掃除 For Each mySP In ActiveSheet.Shapes myAD1 = mySP.TopLeftCell.MergeArea.Address myAD2 = Target.Address If myAD1 = myAD2 Then mySP.Delete Next '===============画像の貼り付け Set mySP = ActiveSheet.Pictures.Insert(myF) '===============タテヨコの縮尺を保持 myHH = Target.Height / mySP.Height myWW = Target.Width / mySP.Width If myHH > myWW Then mySP.Height = mySP.Height * myWW mySP.Width = Target.Width Else mySP.Height = Target.Height mySP.Width = mySP.Width * myHH End If '===============中央へ調整 myHH2 = (Target.Height / 2) - (mySP.Height / 2) myWW2 = (Target.Width / 2) - (mySP.Width / 2) mySP.Top = Target.Top + myHH2 mySP.Left = Target.Left + myWW2 Set mySP = Nothing End Sub

  • Excel2010マクロ/挿入した画像がぼける

    過去に2度、Excel2003を利用して工事写真帳を作成する方法を質問させていただきました。最近、社内でExcel2010を使用している人が多くなり、修正した写真帳でも不具合が発生するようになり、その原因を調べているのですが同じ症例がなかなか見当たりません。そこで今回もまたお知恵を拝借したいと思い投稿しました。 【仕様】工事写真帳は複数シート構成、1シートはA4サイズで縦に3枚の画像が読み込めます。画像の右側には摘要欄があります。画像を読み込む位置をダブルクリックするとセルのサイズ(写真サイズにしてあります)を取得して画像サイズを変更して格納します。 【問題点】一度保存したファイルを開くと画像がぼける。図の書式設定の[サイズ]を確認すると、サイズと角度の高さ=9.59cm、幅=13.69cm(読み込むセルのサイズ)、原型のサイズの高さ=0.38cm、幅=0.42cmとなっています。元の画像サイズは640×480なので、マクロを実行中、どこかのタイミングで画像の一部をトリミングし、縦横サイズを小さくした画像をセルサイズにまで拡大していることが原因だということまではわかりました。ただ、すべてのシートがこの状態なわけではなく、正常に表示されているシートもあります。この場合も画像のサイズと角度の高さ=9.59cm、幅=13.69cm(読み込むセルのサイズ)、原型のサイズの高さ=9.59cm、幅=13.69cmと元の画像より小さくなっています。 コードは次の通りです。どこに問題があるか、ぜひアドバイスをお願いします。 Private Sub Workbook_SheetBeforeDoubleClick(ByVal sh As Object, ByVal Target As Range, Cancel As Boolean) Dim pict As Shape Dim fname With Target If .Column <> 3 Then Exit Sub '3列目でなかったら終了 fname = Application.GetOpenFilename _ ("画像ファイル,*.gif;*.jpg;*.bmp", 1, "画像ファイルを指定して下さい") '画像読込 If fname = False Then Exit Sub Set pict = sh.Shapes.AddPicture(Filename:=fname, linktofile:=True, _ SaveWithDocument:=True, Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height) pict.LockAspectRatio = False '指定された図形のサイズ比率を保持しない pict.Placement = xlMove 'オブジェクトをセルと共に移動する .Offset(, 3).Select '摘要欄(右へ3)へ移動 End With End Sub

  • Excel2003で動いたVisualが2007では?

    Excel2003で作った下記のVisual Basicが2007では、最初にクリックしたところには行かず いつも同じ位置に挿入されます。 出来ればセルF1の位置に挿入したいのですが Sub macro1() Dim Fname As String Dim FLT As String Dim Sheetmei As String FLT = "JPEGファイル(*.jpg),*.jpg" Fname = Application.GetOpenFilename(FLT, 2, "開く", True) If Fname = "False" Then Exit Sub End If Sheetmei = Worksheets(1).Name ActiveSheet.Pictures.Insert(Fname).Select Call Jpeg_size_adjust End Sub サブで下記も有ります Sub Jpeg_size_adjust() Selection.ShapeRange.LockAspectRatio = msoFalse Selection.ShapeRange.Height = 270.75 Selection.ShapeRange.Width = 360

  • エクセル マクロ

    エクセルのある特定のセルをダブルクリックすると 画像ファイルを参照しにいき 貼りつけたい画像ファイル選ぶと そのセルの大きさに合わせて 画像ファイルがそのセルに 貼りつくというマクロが以下の通りなんですが Excel2003からExcel2007へ変更すると 画像ファイルの貼りつく位置がダブルクリックしたセルではない所に 貼りつくようになりました 参照や大きさなどはちゃんと機能しているようです どこを変更すればよいでしょうか? Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range('特定のセル)) Is Nothing Then Exit Sub Cancel = True Dim myPic Dim myRange As Range Dim rX As Double, rY As Double myPic = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif") If VarType(myPic) = vbBoolean Then Exit Sub Set myRange = Target Application.ScreenUpdating = False With ActiveSheet.Pictures.Insert(myPic).ShapeRange rX = myRange.Width / .Width rY = myRange.Height / .Height If rX > rY Then .Height = .Height * rY Else .Width = .Width * rX End If .Left = .Left + (myRange.Width - .Width) / 2 .Top = .Top + (myRange.Height - .Height) / 2 End With Application.ScreenUpdating = True Cancel = True End Sub

  • エクセル 写真貼り付け マクロ

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) Cancel = True '===============画像選択 myF = Application.GetOpenFilename _ ("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False) If myF = False Then MsgBox "画像を選択してください(終了)" Exit Sub End If '===============画像の掃除 For Each mySP In ActiveSheet.Shapes myAD1 = mySP.TopLeftCell.MergeArea.Address myAD2 = Target.Address If myAD1 = myAD2 Then mySP.Delete Next '===============画像の貼り付け Set mySP = ActiveSheet.Pictures.Insert(myF) '===============タテヨコの縮尺を保持 myHH = Target.Height / mySP.Height myWW = Target.Width / mySP.Width If myHH > myWW Then mySP.Height = mySP.Height * myWW mySP.Width = Target.Width Else mySP.Height = Target.Height mySP.Width = mySP.Width * myHH End If '===============中央へ調整 myHH2 = (Target.Height / 2) - (mySP.Height / 2) myWW2 = (Target.Width / 2) - (mySP.Width / 2) mySP.Top = Target.Top + myHH2 mySP.Left = Target.Left + myWW2 Set mySP = Nothing End Sub ネットでこのマクロを見つけて応用したいのですが 教えてください セルをダブルクリックすると画像が選べて貼り付けできるのですが 全部のセルに反応してしまいます セルの範囲指定したいのですがどうすればいいでしょうか? (1)セル結合でA1:D7範囲だけにこのマクロを入れておきたい場合 (2)セル結合でA1:D7とX1:AA4までとか複数選択したい場合 宜しくお願いします

  • 【急】Excelで写真張り付けマクロを書き換えたい

    下記マクロを拾い利用しようと思っているのですが、 以下の点を急ぎ修正しないと使えません。 修正方法などが分からないので、ご教示ください。 要件: ・セルをクリックして写真選択して張り付け、 ・縦横比を変えずに、クリックした結合セルサイズ内に収める。 ・写真は縦横混在に対応 ・写真をセンターに配置する。 ・セルのサイズは変動する。 現状の問題点: ・縦向きの写真を挿入した際にセルの上下から画像がはみ出してしまう。 以下コードーーーーーーーーーーーーーーー Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) Cancel = True '画像選択コマンド myF = Application.GetOpenFilename _ ("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False) If myF = False Then MsgBox "編集する場合はF2を押下してください。" Exit Sub End If '画像データの再構築 For Each mySp In ActiveSheet.Shapes myAD1 = mySp.TopLeftCell.MergeArea.Address myAD2 = Target.Address If myAD1 = myAD2 Then mySp.Delete Next 'リサイズして画像の貼り付け Set mySp = ActiveSheet.Shapes.AddPicture(Filename:=myF, LinkToFile:=False, _ SaveWithDocument:=True, Left:=Target.Left, Top:=Target.Top, _ Width:=0, Height:=0) mySp.ScaleHeight 1, msoTrue mySp.ScaleWidth 1, msoTrue '縮尺を変えずにリサイズ If mySp.Width > Target.Width Then mySp.Width = Target.Width * 0.99 If mySp.Height > Target.Height Then mySp.Height = Target.Height * 0.99 'センター中心に配置 myHH2 = (Target.Height / 2) - (mySp.Height / 2) myWW2 = (Target.Width / 2) - (mySp.Width / 2) mySp.Top = Target.Top + myHH2 mySp.Left = Target.Left + myWW2 Set mySp = Nothing End Sub 以上ご協力の程宜しくお願い申し上げます。

  • VBAの写真貼り付けコードについて教えてください。

    写真をダブルクリックで簡単に貼り付けられるVBAのプログラムを友人に貰ったのですが、 追加で図の外枠に黒の2.5ptくらいの線を縁取る文を追加しようと、マクロで記録したプログラムを 入れてみたのですが上手く動作しません。 コードが --------------------------------------------------------------------------------- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) Cancel = True If Target.MergeCells = False Then Exit Sub '===============画像選択 myF = Application.GetOpenFilename _ ("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False) If myF = False Then Exit Sub End If '===============画像の掃除 For Each mySP In ActiveSheet.Shapes myAD1 = mySP.TopLeftCell.MergeArea.Address myAD2 = Target.Address If myAD1 = myAD2 Then mySP.Delete Next '===============画像の貼り付け Set mySP = ActiveSheet.Pictures.Insert(myF) '===============タテヨコの縮尺を保持 myHH = Target.Height / mySP.Height myWW = Target.Width / mySP.Width If myHH > myWW Then mySP.Height = mySP.Height * myWW mySP.Width = Target.Width Else mySP.Height = Target.Height mySP.Width = mySP.Width * myHH End If '===============中央へ調整 myHH2 = (Target.Height / 2) - (mySP.Height / 2) myWW2 = (Target.Width / 2) - (mySP.Width / 2) mySP.Top = Target.Top + myHH2 mySP.Left = Target.Left + myWW2 Set mySP = Nothing End Sub ------------------------------------------------------------------------- お願いいたします。

専門家に質問してみよう