| 
    
     |  | ▼wen さん:すみません。 Excel2010 上で動かしてみておっしゃってることが呑み込めました。
 
 >ただ、貼り込まれた写真がどうもサイズがうまくいきません。
 
 >'画像を挿入
 >  With ActiveSheet.Pictures.Insert(PicFile)
 >    rX = Target.Width / .Width
 >    rY = Target.Height / .Height
 >    If rX > rY Then
 >      ratio = rY
 >    Else
 >      ratio = rX
 >    End If
 >    .Width = .Width * ratio
 >    .Height = .Height * ratio
 >
 >の部分をどのように書き換えたらいいのかわかりません。
 
 ステップ実行(トレース)していきますと、
 
 (たとえば ratio が 0.5 だったとします)
 
 こちらの【2003】 では
 >    .Width = .Width * ratio
 を実行すると、横方向だけ 1/2 に縮小され、一時的に ひしゃげた
 図になります。
 そして
 >    .Height = .Height * ratio
 を実行して、高さも 1/2に縮小され、元の縦横比が維持された図に
 縮小されます。
 
 ところが【2010】では、そうならないんですね!
 
 >    .Width = .Width * ratio
 を実行すると、Widthはもちろん高さも 1/2 に縮小されます。
 そして
 >    .Height = .Height * ratio
 を実行すると、1/2に縮小された図が 【さらに 1/2】に縮小され、
 とてつもなく小さな図になってしまいました!!
 
 おそらく、この不具合をおっしゃってたのだろうと解せました。
 
 改訂版です
 
 
 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
 Cancel As Boolean)
 Dim PicFile As Variant
 Dim rX#, rY#, Ratio# ' (ratioX, ratioY, ratio)
 Dim L#, T#, W#, H#  '(Left, Top, Width, Height)
 
 '[ファイルを開く]ダイアログボックスを表示
 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)
 W = .Width
 H = .Height
 rX = Target.Width / W
 rY = Target.Height / H
 If rX > rY Then
 Ratio = rY
 Else
 Ratio = rX
 End If
 .Width = W * Ratio
 .Height = H * Ratio
 
 'セルの中央(横方向/縦方向の中央)に配置
 L = Target.Left + (Target.Width - .Width) / 2
 T = Target.Top + (Target.Height - .Height) / 2
 
 Dim is2010 As Boolean
 is2010 = Val(Application.Version) > 13
 is2010 = True
 If is2010 Then 'ver14 = XL2010
 .CopyPicture 'クリップボードに画像コピー
 .Delete 'いったん削除
 Else
 .Left = L
 .Top = T
 End If
 End With
 If is2010 Then
 Target.Activate
 ActiveSheet.Paste
 With Selection
 .Left = L
 .Top = T
 End With
 End If
 Application.ScreenUpdating = True
 Cancel = True
 End Sub
 
 |  |