人生最悪の忘れ物

エクセルで作った「商品リスト」があります。
作家名や色など、好みの条件で検索してもらうには扱いなれている方の多いエクセルがいいかと思ってエクセルにしました。

リスト中の画像が小さいので、拡大表示出来るようにしたいのです。

クリックしたら、メッセージボックスが起動してその中に任意の拡大画像が表示される
もしくはIEを使って別窓で開くようにしたいのですが、このとき、余分なボタンやスペースが表示されないようにしたいのです。(某書籍販売サイトア○ゾンみたいに、戻るボタンか、クローズボタンのみになるのが理想です)
エクセルでそういったことが可能なのでしょうか??

VBAは勉強してみよう!と思ってはじめたところです。はっきりいってど素人の域を出ません。
でも、挑戦してみたいので、お手数ですが、方法をご存知の方、教えてください。

A 回答 (5件)

>画像のほうがかなり圧縮しちゃったので荒く、ぼやっとして


ということは、「リスト中の画像」と「拡大画像」とはファイルが異なるということですね。

 次のような段取りはいかがでしょうか?

1)「商品リスト」に貼り付けられた「リスト中の画像」の名前と「拡大画像」のファイル名の対応表を作るか、もしくは、同じ名前にしておく。
2)「リスト中の画像」をクリックすると、「拡大画像」をワークシートに貼り付け、「拡大画像」をクリックするか、別の「リスト中の画像」をクリックするか、あるいは、セルの選択範囲が変わると「拡大画像」を削除します。

 上記の操作を行なうためには、ワークシート内の画像にマクロを割付ける必要がありますが、
'-------------------------------------------------------------------
Sub マクロ割付()
 Dim myShape As Object
 For Each myShape In ActiveSheet.Shapes
  If myShape.Type = msoPicture Then
   myShape.OnAction = "拡大表示"
  End If
 Next
End Sub
'-------------------------------------------------------------------
というようなことで、一括してマクロを割付けます。


 以下、標準モジュールとシートモジュールに下記のマクロを記述します。

 上記(1)で言うと、「リスト中の画像」の名前と「拡大画像」のファイル名が「同じ名前」の場合のマクロです。
 「リスト中の画像」に拡張子が付いていない場合は、
myLink = myFolder & Application.Caller & ".JPG"
のように書き換えてください。

 まぁ、荒削りなマクロですので、考え方だけご理解いただければ、後はご自分で細々と記述なさってみてください。

'標準モジュール------------------------------------------------------
Sub 拡大表示()
 Application.EnableEvents = False
 Dim myPic As Object
 Dim myFolder As String
 Dim myLink As Variant
 
'閲覧済みの「拡大画像」を削除
 On Error Resume Next
 ActiveSheet.Shapes("拡大画像").Delete
 On Error GoTo 0
 If Application.Caller = "拡大画像" Then Exit Sub
 
'「拡大画像」の保存フォルダのフルパスを指定
 myFolder = "C:\My Documents\My Pictures\hoge\"
 myLink = myFolder & Application.Caller
 Set myPic = ActiveSheet.Shapes(Application.Caller)
 
'「拡大画像」を貼り付ける
 Application.ScreenUpdating = False
 ActiveSheet.Pictures.Insert(myLink).Select
 With Selection.ShapeRange
  .Name = "拡大画像"
  .LockAspectRatio = msoTrue
  .Left = myPic.Left + myPic.Width
  .Top = 0
  .Width = Application.Width - (myPic.Left + myPic.Width) - 100
  If .Height > Application.Height Then .Height = Application.Height
 End With
 Selection.OnAction = "拡大表示"
 ActiveSheet.Shapes(Application.Caller).TopLeftCell.Select
 Application.ScreenUpdating = True
 Application.EnableEvents = True
End Sub

'シートモジュール-----------------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 On Error Resume Next
 ActiveSheet.Shapes("拡大画像").Delete
 On Error GoTo 0
End Sub
    • good
    • 0

>回答番号:No.1 この回答への補足


過去ログを紹介した積りがURLを間違えて貼っていたようです。
大変失礼しました。
以下、時間が取れないのでコメントだけで失礼します。

>拡大した画像をさくっと戻せなかったので、挫折しました。
先にも書きましたが、Sub tes1()では画像の下に隠れているセル範囲のサイズを基準にして拡大されているかどうか判定しています。
セル範囲の指定が適切に行われていれば、拡大/復元が交互に切り替えられるようになっています。
画像が貼り付けられているセル(範囲?)サイズはどうなっていますか?
画像の貼り付けサイズは同じですか?

>画像のほうがかなり圧縮しちゃったので荒く、ぼやっとして・・・・
Excelに貼り付けるときに圧縮したということですか?
圧縮前の元画像は同じPC内に保存されているのですか?
もしそういうことなら、ファイルを直接読み込めばどうでしょうか。
表示はユーザーフォームとかコントロールツールボックスのイメージ枠を使えばどうでしょうか。

>「ユーザーフォーム」でも写真を検索表示できるように・・・・・・
そういう風にして、出来ることを蓄積拡大していけばよいと思いますよ。
実際にやってみて、解らないところを、具体的にピンポイントで、質問を発信してください。

はじめてのユーザーフォーム ~ リスト入力
http://hp.vector.co.jp/authors/VA016119/hajimete …
リスト内の各データを、必要に応じて個別で表示したい
http://www.ne.jp/asahi/juku/excel/071119.htm
    • good
    • 0

縮小画像の入ったセルにコメントを挿入し、コメント枠の[書式設定]-[塗りつぶし効果]で、


その画像を指定するのはいかがでしょうか。
セルにカーソルを合わせると、コメント枠サイズの画像が表示されます。
    • good
    • 0
この回答へのお礼

ありがとうございます。こういうやり方もあったんですね!
ちょっと目から鱗でした。

今回は画像の表示がモニタからずれてしまうということで、
「できれば違う方法で」と言うことになってしまったんですが、別機会に是非利用させていただきます。

ありがとうございました。

お礼日時:2009/03/31 12:49

画像の保存ファイル又はファイルにハイパーリンクを設定してはいかがですか。



写真を表示セルをアクティブにする。 → 挿入 → ハイパーリンク → ハイパーリンクの編集 → 検索先でフォルダ又はファイルを検索 → 表示文字列に適当な名称を入力

入力された文字列をクリックするとリンク先の写真が表示される。
「縮小した画像をメッセージボックスに表示す」の回答画像2
    • good
    • 0
この回答へのお礼

ありがとうございます。
実は最初、ハイパーリンクで拡大表示するようにしてたんですが、それだとIEが立ち上がってしまい、画面をふさいでしまうんです。

年配の方だと、「画面が消えた!」と驚かれるので、保存している(JPG)のままで開いてくれるのが理想だったんです。
なので、メッセージボックス見たいなの使えば、どの縮小画像クリックしても立ち上がるようになって、メモリもあまり食わないのかなー?なんて思ったんです。

不勉強ですみません。ハイパーリンクで、アプリケーションを指定して拡大画像を表示できるのでしょうか。

お礼日時:2009/03/31 12:55

直接画像サイズを拡大/復元してはだめでしょうか。


対象画像に下記マクロを登録すれば、クリックで拡大/復元されます。
サイズの判定基準を画像の下にあるセルサイズとして
Range("C2:E5").Height
としています。
実状に合わせて書き換えてください。

Sub tes1()
  Dim sh As Single
  Dim sw As Single
  Dim h As Single
  
  With ActiveSheet.Shapes(Application.Caller)
    sh = .Height
    sw = .Width
    If sh <= Range("C2:E5").Height Then
      h = 2
    Else
      h = 0.5
    End If
    .Height = sh * h
    .Width = sw * h
  End With
End Sub

別窓で表示するなら、ユーザーフォームでイメージコントロールを使えば良いかもしれません。
エクセルで貼り付けたオブジェクトの画像をユーザーフォームのイメージコントロールで表示する方法
http://oshiete1.goo.ne.jp/kotaeru_reply.php3?q=4 …

この回答への補足

ありがとうございます。試してみました。
画像がそのまま大きくなるんですね!自分としてはちょっと嬉しくなったんですが、画像のほうがかなり圧縮しちゃったので荒く、ぼやっとしててアイタタな画像になってしまうことと、拡大した画像をさくっと戻せなかったので、挫折しました。(;_;)

で、
>別窓で表示するなら、ユーザーフォームでイメージコントロールを使えば良いかもしれません。
と仰っていた「ユーザーフォーム」が初耳だったものでそちらを少し検索してみました。
フォーム自作してそこに画像が貼れるんですね!?知りませんでした。

「デフォルトでフォームサイズが固定されている」とコメントされている方がいらっしゃったのですが、少し大きめで表示しつつ、「ユーザーフォーム」でも写真を検索表示できるようになったらいいな!と一瞬思ったのですが、初学者には無謀でしょうか?

もしお手すきでしたらアドバイス下さい。

補足日時:2009/03/31 15:26
    • good
    • 0

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


おすすめ情報