• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:教えてください。)

エクセル2007のマクロ、VBA書き込みについて

このQ&Aのポイント
  • エクセル2007のマクロやVBAを使用して、指定された結合セルにのみ画像を挿入したいです。
  • 現在のVBAでは、すべてのセルに画像が挿入されてしまいますが、結合セルのみに挿入したいです。
  • 縦B9からB21、縦B24からB36、縦B39からB51、横BからEの結合セルに同じサイズの画像を挿入したいですが、どの部分にVBAを書き込めばいいか分かりません。

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

  • ベストアンサー
noname#144013
noname#144013
回答No.1

こんにちは。 今回の問題を確認しますと、  ワークシート上に設定した下記3箇所の結合セル範囲について、    (1)B9:E21    (2)B24:E36    (3)B39:E51  現在は、このセル範囲『以外』のセルがダブルクリックされた際にも、[画像選択ダイア  ログ]が表示されてしまい、続けて画像ファイルを選択してしまうと、そのセルに画像が  挿入されてしまうのでそれを回避したい。  言い換えますと、上記3箇所の結合セル範囲以外のセルがダブルクリックされた場合  は、何も行わない処理にしたい。 ということで宜しいでしょうか? そうであれば、ご提示のダブルクリック時のイベントプロシージャの最初の方で、 ターゲットセル(Target)が、上記3箇所の結合セル範囲内に含まれているかどうかを 見て、含まれていなければ処理を抜ける(終了させる)ようにすれば良いと思います。 言い換えますと、対象の3箇所(の何れか)の結合セルがダブルクリックされた時だけ、 画像挿入処理を続行するようにするという事です。 その為には、下記関数(メソッド)が利用できると思います。   Application オブジェクトの Intersect メソッド   ※このメソッドの詳細は、ご使用のExcelのヘルプ(VBAのヘルプ)をご覧下さい。 あと、上記の対策を行った場合、以下のような注意点があります。 対象の結合セルに画像を貼り付ける際に、画像がセル範囲内に収まるようにサイズ 調整を行っていますが、セル範囲のサイズいっぱいまで拡大or縮小するようになって いるようです。 その場合、もし、元の画像の縦横比がセル範囲の縦横比と全く同じだった場合は、 画像とセル範囲の間に隙間が全くなくなってしまいます。 その状態で、対象の結合セルをダブルクリックしようとして、マウスを持っていきクリック するとセルではなく、画像が選択されてしまい、セルのダブルクリックが上手くできなく なってしまいます。 ですので、画像サイズを調整する際は、対象の結合セル範囲のサイズより少し小さめ のサイズにするようにして、画像とセル範囲の間に隙間を作るようにした方が良いかも しれません。 ※その他の方法(セルのダブルクリックではなく、コマンドボタンなどで画像挿入処理を  行うなど)も考えられるとは思いますが。。。 以上を踏まえて、ご提示のマクロを修正したマクロソースを下記に掲載しました。 (下記リンク先参照) 宜しければ検証してみて下さい。(※尚、当方ではExcel2000を使用しています) ■マクロソース(修正版) http://ideone.com/fHZ2t <上記マクロの補足> マクロ内の画像サイズ調整部分での、画像サイズとセルサイズの隙間を作るための調整 サイズ(隙間サイズ)ですが、ソース内では縦・横ともに10ポイント(上下または左右合わせて) にしています。 このサイズはあくまで暫定ですので、ご使用の環境に合わせて適せん調整してみて下さい。 以上です。

yamari_750
質問者

お礼

FarEyesさんへ ご回答有難うございます、早速書き直して作業進めさせて頂きました、 きちんと挿入できました、まことに有難うございます、 何分50歳過ぎてからやり始めたもので、非常に覚えるのも時間がかかり 自分の不器用さに情けなさを感じる事ばかりです、また有り触れた質問 などでご迷惑おかけするかも知れませんが宜しくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

    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までとか複数選択したい場合 宜しくお願いします

  • VBAの修正コードを教えてください(初心者)

    いつもお世話になっております。 下記のVBAコードを使わせて頂き、自分で作成したエクセルにセルに合わせて自動で画像データを添付するようにしたいのですが。 (1)タテヨコの縮尺を保持⇒セルに合わせて縦横の変倍を行う (2)又は、貼付部のセルのサイズは決まっているのでサイズを指定して貼り付ける となるように修正したいのですが、なにぶんVBAは初心者なもので、全くわかりません。 どなたかご指導を宜しくお願い致します。 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

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

    マクロ 初心者です。 ワークシート指定して、ダブルクリック等を使っての画像選択、貼り付け&セルの大きさに合わせる)ことはできるのですが、 ダブルクリック等ではなく、手動でマクロを実行して指定のセル(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

  • VBAの操作方法について教えてください(初心者)

    いつもお世話になっております。 以下のような操作をエクセルにおいて行いたいのですが。 (1)エクセルのセルをクリック! (2)エクスプローラー起動!画像データを選択! (3)セルに合わせて縦横変倍をかけてデータ(JPGデータ)を貼付! 同様の操作が可能な以下のVBAが公開されていたので使わせて頂こうと考えているのですが、操作方法が分かりません。 VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = "Sheet1" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = True 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 作成したエクセルのVBエディタを開く⇒標準モジュールの作成⇒上記VBAをコピペ・・・ 正直わかりません。昨日一晩かけて調べたのですがわかりません。 どなたか宜しくお願い致します。

  • 【急】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 ------------------------------------------------------------------------- お願いいたします。

  • excel マクロ 画像挿入

    以下のマクロでリンク貼り付けではない 画像挿入を作成しようと思いましたがエラーになります 詳しい方 修正 お願いいたします 当方のしたい事としましては 選択したセルでのみに画像挿入 リンクではない画像貼り付け 以下例では B3,B17,B31,B46,B60,B74 セルをダブルクリックすればそこに画像を挿入です Private Sub Worksheet_BeforeDoubleClick(ByVal Target As 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 If Not Intersect(Range("B3,B17,B31,B46,B60,B74"), Target) Is Nothing Then myPic = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif") 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

  • VBAの内容の修正をお願いさせて頂きます

    VBAの内容の修正をお願いしたく質問させて頂きます。 知人にExcel2007でシートのアルバムに写真をクリックで貼り付けられ、また別に張り付けてあるボタンでフォルダーを選択するとフォルダー内の写真を一括貼り付けるVBAを作成してもらいました。 ところがExcel2013で作成したものは他のPCで見られず、『リンク先が分からない・・・』と言った内容のメッセージが表示されます。 張り付けたボタンをクリックすると、フォルダーの選択はできますが、その後 『実行時”1004”  PicturesクラスのInsertプロパティを取得できません』と言うメッセージが出ます。 残念ながら知人もよくわかりません。 表示内容がお分かりの方はぜひとも修正のご指導をお願いします。 写真のアルバムはA4サイズに横2×縦4の8枚を並べています。セルの結合が8枚あり、その場所をクリックすることで1枚1枚貼り付けることができます。 また、VBAでフォルダ内で番号順に並んでいる写真がばらばらに貼りついて今します。その部分も分かりましたら、よろしくお願いします。 VBA 左上表示:(General) 右上表示:画像貼り付け Sub 画像貼り付け() '===============フォルダ選択 Set myPath = CreateObject("Shell.Application") _ .BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, 0) If myPath Is Nothing Then Exit Sub If myPath.Items Is Nothing Then Exit Sub If myPath.Items.Item Is Nothing Then Exit Sub フォルダ = myPath.Items.Item.Path Set myPath = Nothing '===============画像の掃除 ' For Each mySP In ActiveSheet.Shapes ' myAD1 = mySP.TopLeftCell.MergeArea.Address ' myAD2 = Target.Address ' If myAD1 = myAD2 Then mySP.Delete ' Next 元シト = ActiveSheet.Name セル = Array("C4", "AO4", "C21", "AO21", "C38", "AO38", "C55", "AO55") i = 8 Set myFS = CreateObject("Scripting.FileSystemObject") For Each myF In myFS.GetFolder(フォルダ).Files myEXT = LCase(myFS.GetExtensionName(myF)) If myEXT = "jpeg" _ Or myEXT = "jpg" _ Or myEXT = "gif" _ Or myEXT = "tiff" _ Or myEXT = "bmp" _ Or myEXT = "png" _ Or myEXT = "tif" Then If i > 7 Then i = 0 Sheets(元シト).Copy after:=Sheets(Sheets.Count) End If '===============画像の貼り付け Set mySP = ActiveSheet.Pictures.Insert(myF) myMA = Range(セル(i)).MergeArea.Address '===============タテヨコの縮尺を保持 myHH = Range(myMA).Height / mySP.Height myWW = Range(myMA).Width / mySP.Width If myHH > myWW Then mySP.Height = Range(myMA).Height mySP.Width = Range(myMA).Width Else mySP.Height = Range(myMA).Height mySP.Width = Range(myMA).Width End If '===============中央へ調整 myHH2 = (Range(myMA).Height / 2) - (mySP.Height / 2) myWW2 = (Range(myMA).Width / 2) - (mySP.Width / 2) mySP.Top = Range(myMA).Top + myHH2 mySP.Left = Range(myMA).Left + myWW2 Set mySP = Nothing i = i + 1 End If Next Set myFS = Nothing End Sub

  • エクセル2010 挿入画像の圧縮 VBA

    お世話になります。 エクセル2010を使用しています。写真帳を作成しダブルクリックすれば写真が挿入されるようVBAにて作成しましたが、写真の解像度が高いので挿入するたびに画像が圧縮するようにVBAを組みたいのですが、どなたかご教示ください。 具体的には一同挿入した画像を一度コピーし、再度貼り付ける・・・という動作かなと考えているのですが、マクロの記憶では記録されず・・・困っております。 現在の写真帳の構文は 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 '挿入のセルを指定 If Application.Intersect(Target, Range("d6,d23,d40")) Is Nothing Then Exit Sub Cancel = True Application.ScreenUpdating = False End If '写真挿入 Next myPic = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif") If myPic = False Then MsgBox "画像を選択してください" Exit Sub End If Set myRange = Target 'このセル範囲に収まるように画像を縮小する Application.ScreenUpdating = False With ActiveSheet.Shapes.AddPicture(myPic, False, True, myRange.Left, myRange.Top, myRange.Width, myRange.Height) rX = 0.85 rY = 1 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 '写真を縦方向に中央に配置 .ZOrder msoSendToBack '最背面へ移動 End With Application.ScreenUpdating = True Cancel = True End Sub 上記に.CUT などを書き足せばよいのか・・・ →エラーばかりで動かなったので。。  こちらに質問することにしました。 どうぞ、よろしくお願いします。

  • ドロップダウンリストを設定すると他のマクロがエラーになる

    マクロ初心者です(質問も初心者です) 下記のマクロを(抜粋)を使用していましたが別のセルに ドロップダウンリストを設定すると「実行時エラー’1004’」 アプリケーション定義またはオブジェクト定義のエラーです とでます なぜでしょうか? 対処方法があれば教えてください 宜しくお願いします End If '===============画像の掃除 For Each mySP In ActiveSheet.Shapes myAD1 = mySP.TopLeftCell.MergeArea.Address myAD2 = Target.Address If myAD1 = myAD2 Then mySP.Delete Next