画像表示マクロ ができるまで その2
おさらい
Sub test() Dim imgPath As String Dim myShape As Shape imgPath = "C:¥test¥フリー画像素材¥ahiru.jpg" Set myShape = ActiveSheet.Shapes.AddPicture( _ Filename:=imgPath, _ Linktofile:=True, _ SaveWithDocument:=False, _ Left:=0, _ Top:=0, _ Width:=0, _ Height:=0) With myShape .ScaleHeight 1, msoTrue .ScaleWidth 1, msoTrue End With End Sub
こんな感じで書いて、cドライブの「test」フォルダの「ahiru.jpg」が
こんな感じで表示されています。*1
位置とサイズを調整する
Left:=0, _ Top:=0, _
この部分が、位置を指定しています。
どちらも0だと「左上の基準点から、左から0、上から0だけ離れた位置に貼り付け」という意味。
縦の位置
A1セルに行ごとの「タイトル」を表示したいので、画像はA2セルにあわせて貼りたい。
「vba 行の高さ」あたりで検索すると1行目の行の高さは「Rows(1).Height」でゲットできるらしいことがわかります。
そこで
Left:=0, _ Top:=Rows(1).Height, _
としてみます。
縦の位置をあわせることに成功。
サイズ
横が大きすぎるので、A列の幅にあわせたいところ。
サイズを調整しているのは
With myShape .ScaleHeight 1, msoTrue .ScaleWidth 1, msoTrue End With
この部分です。
※ 「1」というところが、「元の大きさの1倍」という意味
※ 「msoTrue」は、元の画像を基準にするという意味
(「msoFalse」にすると、現在表示されている大きさを基準にする)
倍率を求める
- A列の幅
- 画像の幅
から、調整のための倍率を出します。
例)画像の元々の幅がA列の幅の1.2倍である場合 A列の幅 ÷ 画像の幅 = 1 / 1.2 ≒ 0.83 ※約83%の倍率で画像を表示させればA列の幅にあう
ということになります。
以上を踏まえ、
Sub test() Dim imgPath As String Dim myShape As Shape Dim bairitu As Double imgPath = "C:¥test¥フリー画像素材¥ahiru.jpg" Set myShape = ActiveSheet.Shapes.AddPicture( _ Filename:=imgPath, _ Linktofile:=True, _ SaveWithDocument:=False, _ Left:=0, _ Top:=Rows(1).Height, _ Width:=0, _ Height:=0) With myShape .ScaleHeight 1, msoTrue .ScaleWidth 1, msoTrue bairitu = Columns(1).Width / .Width .ScaleHeight bairitu, msoTrue .ScaleWidth bairitu, msoTrue End With End Sub
一度、画像本来の大きさにしてから倍率を変数「bairitu」に入れ、
再度ScaleHeight,ScaleWidthを指定しています。
確認する
できました。
幅を変えても大丈夫です。
*1:前回の、ろくろ写真は背景と溶け込んでしまい説明しづらいことが判明したので、ひっそりと交代