may the VBA be with you

Excel VBAとか業務自動化とか

画像表示マクロ ができるまで その2

はじめに

前回、

vba-belle-equipe.hatenablog.com

画像を張り付けることができました。

今回は続きです。

おさらい

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」が

f:id:vba-belle-equipe:20160401131516p:plain

こんな感じで表示されています。*1

位置とサイズを調整する

      Left:=0, _
      Top:=0, _

この部分が、位置を指定しています。

どちらも0だと「左上の基準点から、左から0、上から0だけ離れた位置に貼り付け」という意味。

縦の位置

A1セルに行ごとの「タイトル」を表示したいので、画像はA2セルにあわせて貼りたい。

vba 行の高さ」あたりで検索すると1行目の行の高さは「Rows(1).Height」でゲットできるらしいことがわかります。

そこで

      Left:=0, _
      Top:=Rows(1).Height, _

としてみます。

f:id:vba-belle-equipe:20160401132923p:plain

縦の位置をあわせることに成功。

サイズ

横が大きすぎるので、A列の幅にあわせたいところ。

サイズを調整しているのは

  With myShape
    .ScaleHeight 1, msoTrue
    .ScaleWidth 1, msoTrue
  End With

この部分です。

※ 「1」というところが、「元の大きさの1倍」という意味
※ 「msoTrue」は、元の画像を基準にするという意味
(「msoFalse」にすると、現在表示されている大きさを基準にする)

倍率を求める
  1. A列の幅
  2. 画像の幅

から、調整のための倍率を出します。

例)画像の元々の幅が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を指定しています。

確認する

f:id:vba-belle-equipe:20160401141807p:plain

できました。

f:id:vba-belle-equipe:20160401142011p:plain

幅を変えても大丈夫です。

つづく

残ったミッションは

  • 行を選択した時に画像変更

です。


次回につづきます。
vba-belle-equipe.hatenablog.com

*1:前回の、ろくろ写真は背景と溶け込んでしまい説明しづらいことが判明したので、ひっそりと交代