アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセル(2013)VBAを使って、画像を挿入し、挿入した画像を図として貼付けしているのですが、
その後、貼り付けた図をセルにおさまる最大限の大きさ(縦横比は変更しない)
に変更したいのですが、どのようなコードを書けば良いのかご教授頂きたいです。

今出来ているマクロは、ネットからコピーしてきたものの為、
私には知識が足りずカスタマイズができませんでした。。。
似たような質問があったのですが、そちらも私には理解できませんでした。。

以下が現在のコードです。”【質問】”と記載した箇所に入れるコードを教えて頂きたいです。

※画像を全て貼り付けてから、全ての画像のサイズをセルに合わせる。という方法は
 避けたく、都度取り込んだ画像のサイズを変えるようにしたいです。

何卒よろしくお願いいたします!!
------------------------------------------------------------------------------

Sub 画像とファイル名書き出し()

Dim fName As Variant
Dim i As Long
Dim Pict As picture
Dim mySp As Shape, myRng As Range
Dim myHgt As Double, myWdt As Double

'ファイル選択
fName = Application.GetOpenFilename("画像 ,*.emf; *.wmf; *.jpg; *.jpeg; *.jfif; *.jpe; *.png; *.bmp; *.dib; *.rle; *.gif; *.emz; *.wmz; *.pcz; *.tif; *.tiff; *.eps; *.pct; *.pict; *.wpg", MultiSelect:=True)

If IsArray(fName) Then
Application.ScreenUpdating = False
'配列に格納されたファイル名をソート
BubbleSort fName, True
For i = 1 To UBound(fName)
Set Pict = ActiveSheet.Pictures.Insert(fName(i))


With Pict
.TopLeftCell = ActiveCell
.ShapeRange.LockAspectRatio = msoTrue
.Cut
ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False


' <<<【質問】ここでセルにおさまる最大限の大きさ(縦横比は固定)に変更したいです>>>
'
'
'
'
'

ActiveCell.offset(0, 1) = fName(i) '保存場所&ファイル名
ActiveCell.offset(0, 2) = Dir(fName(i)) 'ファイル名
End With
ActiveCell.offset(1, 0).Activate
Application.StatusBar = "処理中:" & i & "/" & UBound(fName) & "枚目"

Next i
End If
With Application
.StatusBar = False
.ScreenUpdating = True
End With

Set Pict = Nothing
If i < 1 Then
MsgBox "0枚の画像を挿入しました", vbInformation

Else
MsgBox i - 1 & "枚の画像を挿入しました", vbInformation
End If

End Sub
'値の入替え
Public Sub Swap(ByRef Dat1 As Variant, ByRef Dat2 As Variant)

Dim varBuf As Variant
varBuf = Dat1
Dat1 = Dat2
Dat2 = varBuf

End Sub

'配列のバブルソート
Public Sub BubbleSort(ByRef aryDat As Variant, _
Optional ByVal SortAsc As Boolean = True)

Dim i As Long
Dim j As Long
For i = LBound(aryDat) To UBound(aryDat) - 1
For j = LBound(aryDat) To LBound(aryDat) + UBound(aryDat) - i - 1
If aryDat(IIf(SortAsc, j, j + 1)) > aryDat(IIf(SortAsc, j + 1, j)) Then
Call Swap(aryDat(j), aryDat(j + 1))
End If
Next j
Next i

End Sub

A 回答 (1件)

こんにちは、以下のコードをコメント部にいれてみて下さい。



'ここから
'この行はとりあえずコメントにしました
'''''ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False

'変数設定はループの外(上の変数設定の部分)でして下さい
dim wWIDTH as long
dim wHIGHT as long
dim wRITU as double
dim MyShape as shape
dim oPIC as stdole.IPictureDisp

cells(i,1).select '<--- 画像を貼り付けるセルを選択しています

Set oPIC=LoadPicture(fName(i))

'指定したセルの高さに合わせる場合(今回は高さに合わせました)
wHIGHT=Selection.height 'セルの高さ
wRITU =wHIGHT/oPIC.height '比率=セルの高さ / 実画像の高さ
wWIDTH=int(oPIC.width*wRITU)

'指定したセルの横幅に合わせる場合
'' wWIDTH=Selection.width 'セルの幅
'' wRITU =wWIDTH/opic.width '比率=セルの幅 / 実画像の幅
'' wHIGHT=int(oPIC.height*wRITU)

Set MyShape=ActiveSheet.Shapes.AddPicture(Filename:=fName(i),LinkToFile:=False,SaveWithDocument:=True, _
Left:=Selection.Left,Top:=Selection.Top,Width:=wWIDTH,Height:=wHIGHT)
'ここまで

では頑張ってください
    • good
    • 1
この回答へのお礼

ありがとうございます!!
ご丁寧に、縦幅に合わせる場合、横幅に合わせる場合を記載いただいたり、
1箇所づつ動作の内容を記載してくださったり、本当に有難うございます!!!不要箇所も教えて頂けて助かりました。

まこちらをそのままコードの中に入れさせて頂きまして、
やりたいことができるようになりました!

無知ゆえに、説明の足りていない箇所などもあったかと思いますが
内容を汲みとっていただけて大変感謝しております。
本当に有難うございました!!!!

お礼日時:2015/11/29 13:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A