即効テクニック

図形操作関連のテクニック

コメントに画像を表示する

(Excel 97/2000/2002/2003/2007)
セルにコメントを挿入するには次のようにします。

Sub Sample1()
  With ActiveCell.AddComment
    .Text "これはコメントです"
    .Visible = True
  End With
End Sub   
コメントは、一般的にはこのように文字列を表示しますが、実は画像を表示することも可能です。 セルにコメントを表示するには次のようにします。 なお、ここではC:\Sample.jpgを表示するものとします。
Sub Sample2()
  With ActiveCell.AddComment
    .Shape.Fill.UserPicture "C:\Sample.jpg"
    .Visible = True
  End With
End Sub   
表示するだけならこれでいいのですが、表示された画像はコメント枠の大きさに合わせて、自動的に拡大縮小されてしまいます。 画像の大きさを優先して、コメント枠の大きさを変更するにはどうしたらいいでしょう。 コメント枠には大きさを自動調整するAutoSizeというプロパティがありますが、このプロパティで自動調整されるときは文字列が基準になります。 今回のように、表示した画像に合わせて自動調整されることはありません。 コメント枠には、大きさをセンチメートルで指定する機能がありますので、これを使って画像の大きさに合わせてみましょう。 それには、次の2つの問題があります。 (1)画像の大きさをどうやって取得するか (2)画像の大きさをどうやってセンチメートルに変換するか (1)は以外と簡単な方法で実現できます。 UserFormのイメージコントロールに画像を表示するときに使うLoadPicture関数は、引数で指定した画像をPictureオブジェクトとして返します。 PictureオブジェクトにはWidthプロパティとHeigtプロパティがありますので、それを調べれば画像の大きさがわかります。 次のマクロは、C:\Sample.jpgの大きさを表示します。
Sub Sample3()
  Dim IMG As Object
  Set IMG = LoadPicture("C:\Sample.jpg")
  MsgBox IMG.Width & vbTab & IMG.Height
End Sub   
ただし、これで取得できる画像のサイズは単位がポイントですからセンチメートルに変換しなければなりません。 これには、ApplicationオブジェクトのCentimetersToPointsメソッドを使います。
Sub Sample4()
  Dim IMG As Object
  Set IMG = LoadPicture("C:\Sample.jpg")
  With ActiveCell.AddComment
    .Shape.Fill.UserPicture "C:\Sample.jpg"
    .Shape.Height = Application.CentimetersToPoints(IMG.Height) / 1000
    .Shape.Width = Application.CentimetersToPoints(IMG.Width) / 1000
    .Visible = True
  End With
End Sub