[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セルのサイズに合わせて画像挿入』(りあき)
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 Not Intersect(Range("N:N"), Target) Is Nothing Then
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 '★元のサイズに戻す '===============タテヨコの縮尺を保持 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 If
End Sub
< 使用 Excel:Excel2013、使用 OS:Windows10 >
とりあえずは、セルの縦横比と画像の縦横比なんて気にせず、まずセル幅に合わせてリサイズしましょう。 そして、リサイズ後の画像高さとセル高さを比べて、画像高さの方が大きいようならば、セル高さに合わせて再度リサイズすることで解決できると思います。
(???) 2019/09/05(木) 17:57
ダメだー。手持ちの画像だと再現しなかったです。 セルのサイズも色々変えてやってみましたけど、はみ出さない。 縦横比が[1対9]くらい極端な画像も使ってみましたが、これもはみ出さない。 ピクセル縦横比が正方形じゃないjpgも使ってみましたが、縦横比は狂ったままでも、はみ出しはしない。
どういう条件下での現状なんでしょうね...? (どなたか再現出来ますか?)
↓はセルに合せてリサイズする部分だけ別の方法に変えたものですが、これもはみ出しますかね?
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 Not Intersect(Range("N:N"), Target) Is Nothing Then 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) mySp.ScaleHeight 1, msoTrue '★元のサイズに戻す mySp.ScaleWidth 1, msoTrue '★元のサイズに戻す ''===============タテヨコの縮尺を保持 ' 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 mySp.LockAspectRatio = True If mySp.Height > Target.Height Then mySp.Height = Target.Height If mySp.Width > Target.Width Then mySp.Width = Target.Width mySp.LockAspectRatio = False '===============中央へ調整 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 If End Sub
単に再現したいだけの人なんで、なんか、スミマセン...^^;
(白茶) 2019/09/05(木) 21:01
(マナ) 2019/09/05(木) 21:28
(マナ) 2019/09/05(木) 21:44
はぁーそゆことですか。へぇー。 そんな事になっちゃうんですね。
マナさん、ありがとうございました。
(りあきさん、無駄にスレ汚してゴメンナサイでした)
(白茶) 2019/09/05(木) 22:16
Windowsのプロパティ表示では、回転情報は表示しなかったように思うので、JPEGのタグ情報を表示できるフリーツール(JpegAnalyzer Plus等)を使って、元画像と再保存した画像を比べてみてください。
ちなみに、JPEGって不可逆圧縮しているので、再圧縮保存する度に画像が劣化していくので、注意。(まぁ、数回くらいなら気づかないレベルですが)
(???) 2019/09/06(金) 10:12
業務連絡。
↓で再質問されたようです。
[[20190910162053]] 『画像を回転させる』(りあき)
(OK) 2019/09/10(火) 17:44
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.