[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『指定したセルのみ、画像挿入したい』(もじょ)
以下のコードを使用することでセル内(結合含む)をダブルクリックすると比率維持した画像が挿入できました。
しかし、これだと全てのセルに適用されてしまい困っています。
例えばA1だけに適用させたいです。
どこにどのコードを入れれば良いか教えてほしいです。
ちなみにエクセルは素人で、マクロを使用したのは今回が初めてです。。。
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で。
'範囲内で最大になるように加工
With mySp
Set r = .TopLeftCell.MergeArea
If r.Width / .Width < r.Height / .Height Then
d = Application.WorksheetFunction.RoundDown(r.Width / .Width, 2)
Else
d = Application.WorksheetFunction.RoundDown(r.Height / .Height, 2)
End If
.ScaleWidth d, msoFalse, msoScaleFromTopLeft
.ScaleHeight d, msoFalse, msoScaleFromTopLeft
.Left = r.Left + r.Width / 2 - .Width / 2
.Top = r.Top + r.Height / 2 - .Height / 2
End With
'===============タテヨコの縮尺を保持
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
< 使用 Excel:Excel2007、使用 OS:Windows10 >
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.