プロが教える店舗&オフィスのセキュリティ対策術

以前、Excel2003を利用して工事写真帳を作成する方法を質問させていただきました。その後、工事写真帳は実用化して利用していますがWindows vistaのPCが増え、Excel2007でこの工事写真帳を使ってみたところ、次のような症状が起きてしまいます。どう訂正したら良いか教えていただければと思い再度投稿しました。

【仕様】工事写真帳は1シート構成、用紙1枚に3枚画像が入り、画像の右側には摘要欄があります。画像を読み込む位置をダブルクリックするとセルのサイズ(写真サイズに結合してあります)を取得して画像サイズを変更して格納します。
【問題点】ダブルクリックをすると読み込みたいセルより若干ずれた場所(左上寄り)に読み込まれます。2枚目以降ダブルクリックをすると1枚目の画像の上に重なった状態で読み込まれてしまいます。

コードは次の通りです。ぜひアドバイスをお願いします。


Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

Dim pict As String

gyo = ActiveCell.Row 'クリック行の取得
retu = ActiveCell.Column 'クリック列の取得

If retu = 3 Then

Set scel = Cells(gyo, retu)
scel.Select 'セルサイズの取得
w = Selection.Width
h = Selection.Height


fname = Application.GetOpenFilename _
("画像ファイル,*.gif;*.jpg;*.bmp", 1, "画像ファイルを指定して下さい") '画像読込
If fname = False Then
Exit Sub
End If


ActiveSheet.Pictures.Insert(fname).Select
pict = Selection.Name
With ActiveSheet.Shapes(pict) '画像のサイズ変更
.LockAspectRatio = False
.Placement = xlFreeFloating
.Placement = xlMove
.Width = w
.Height = h
End With


Range("F" & gyo).Select '摘要欄へ移動

End If

End Sub

A 回答 (2件)

参考URLにあるように、TopとLeftを指定する必要があるようです。



ここではAddPictureメソッドを使用してみました。

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'クリックしたセルやシートは変数に格納されています。

Dim pict As Shape
Dim fname

With Target
If .Column <> 3 Then Exit Sub
fname = Application.GetOpenFilename _
("画像ファイル,*.gif;*.jpg;*.bmp", 1, "画像ファイルを指定して下さい") '画像読込
If fname = False Then Exit Sub
Set pict = Sh.Shapes.AddPicture(Filename:=fname, linktofile:=True, _
SaveWithDocument:=True, Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height)
pict.LockAspectRatio = False
pict.Placement = xlMove
.Offset(, 3).Select '摘要欄へ移動
End With

End Sub

参考URL:http://park.geocities.jp/tryvba/excel2007questio …

この回答への補足

cafe_au_laitさん、回答ありがとうございます。

今までのコードをcafe_au_laitさんが教えてくださったものに書き換えてみました。
見事に動きました!こんなに簡略化できるとは・・・まだまだ勉強が必要だと実感しました。

ただ、まだ完璧とはいかず悩んでいます。読み込んだ画像が結合したセルサイズ
(縦9.64cm×横13.69cm)より縦サイズが0.16cmほど小さく、読み込み縦位置も下にいくにつれ
少しずつ上にずれて読み込まれてしまいます。

作成している写真帳はA列と1行目は空白列と行を挿入してあり、印刷範囲から除かれている
ことが原因なのでしょうか?

解決策があれば引き続きアドバイスをお願いします。

補足日時:2008/07/31 10:35
    • good
    • 0

こんにちは。



>ただ、まだ完璧とはいかず悩んでいます。読み込んだ画像が結合したセルサイズ
>(縦9.64cm×横13.69cm)より縦サイズが0.16cmほど小さく、読み込み縦位置も下にいくにつれ
>少しずつ上にずれて読み込まれてしまいます。

ズームの倍率の設定を確認していただけますか?
こちらでいろいろ試したところ、倍率を100%以外にした時に大きなずれが生じました(Excel2007のみ検証)。AddPictureの代わりにPictures.Insertを用いても同様の挙動でした。理由はわかりませんが・・・。
    • good
    • 0
この回答へのお礼

cafe_au_laitさん、こんばんは!

ズーム倍率の設定が85%になっていたので100%にしてマクロを実行してみました。
不思議、100%の時だけちゃんと結合したセルサイズになります!
これはExcel2007のバグなのでしょうか?

作成中の書類がどんなものか詳しくお話していなかったのに、わざわざ時間を割いて
いろんなケースを想定して試していただきありがとうございます。

社内でははじめてのWindowsVistaのPCだったのでExcel2007にまさかこのような
不具合があるとは思ってもみませんでした。早速PCを持ち主に返すことができました。

しばらくは写真整理をExcel2003のPCでしてもらうつもりでしたが、こんなに早く解決
できるとは感謝、感謝です。ありがとうございました!

お礼日時:2008/07/31 20:22

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