• ベストアンサー

エクセルで貼り付けたオブジェクトの画像をユーザーフォームのイメージコントロールで表示する方法

エクセルで画像をオブジェクトで作り、ユーザーフォームに作ったイメージコントロールに表示する方法はないでしょうか? 条件によってイメージの画像が切り替わるようにしたいのですが。 別の画像ファイルから読み出すことはあまりしたくありません。あくまでエクセルの中にある画像からフォームのイメージに表示したいのですが。何かいい方法があれば教えてください。 回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • pauNed
  • ベストアンサー率74% (129/173)
回答No.3

(#2コメントへのレスです) とりあえず http://www.google.co.jp/search?q=win32api%E3%81%A8%E3%81%AF%3F&lr=lang_ja http://wisdom.sakura.ne.jp/system/winapi/win32/win1.html VB系から扱うなら http://www.winapi-database.com/Beginner/page1.html ですが、中途半端に手を出すと少々やっかいかも。当り前の事ですが、自己責任でお願いします。 それより >本当はワークシート上で画像を表計算のデータと同じようにデータとして扱って作りたかったのです なら http://www.officetanaka.net/excel/function/tips/tips14.htm http://www.geocities.jp/chiquilin_site/data/050530_search.html ...のあたりが参考になるかもしれませんね。

miya_HN
質問者

お礼

説明不足で申し訳ありませんでした。 このプログラムは初心者にとってはやはり難しいですね。 下の二つのサイトは大変参考になりました。 ありがとうございました。

その他の回答 (3)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

#1です。 シートに画像を置いてUserFormで使う場合は、コントロールツールボックスのイメージを使うと割と楽です。 下記はUserFormのコマンドボタンを押すたびに画像を入れ替えるサンプルです。 試す場合は手順に従って新規ブックでどうぞ。 1)新規ブックを起動する。 2)表示-ツールバー-コントロールツールボックスを表示する。 3)コントロールツールボックスの「イメージ」を Sheet1 に複数配置する。 4)それぞれプロパティの Picture で画像を設定する。 5)ツール-マクロ-VisualBasicEditorを起動する。 6)UserFormを追加する。 7)UserForm1 に Image1 と CommandButton1 を配置する。 8)CommandButton1 をダブルクリックして、出て来たコードを全て消してから下記をコピペ。 '---------ここから-------------------------------------------------------- Dim cnt As Integer Private Sub UserForm_Initialize()   cnt = 1   ImageChange End Sub Private Sub CommandButton1_Click()   ImageChange End Sub Private Sub ImageChange()  On Error Resume Next  With Worksheets(1)   If cnt > .OLEObjects.Count Then cnt = 1     Image1.Picture = .OLEObjects("Image" & cnt).Object.Picture     cnt = cnt + 1  End With End Sub '---------ここまで--------------------------------------------------------

miya_HN
質問者

お礼

丁寧に教えていただきありがとうございます。 若干使ったことがないコードもありますが参考にして勉強したいと思います。 ありがとうございました。

  • pauNed
  • ベストアンサー率74% (129/173)
回答No.2

こんにちは。 >別の画像ファイルから読み出すことはあまりしたくありません。 との事なので、かなり難易度があがると思います。 ActiveSheet.Shapes(1).CopyPicture Appearance:=xlScreen, Format:=xlBitmap などとしてClipboardに送った後、 QNo.2885043 を参考にWindowsAPIを使う事になるかと。 VBAだけで比較的簡単にやるなら Const fn As String = "c:\tmpshp.jpg" With ActiveSheet   If .Shapes.Count Then     With .Shapes(1)       .Copy       With .Parent.ChartObjects.Add(, , .Width + 5, .Height + 5)         With .Chart           .ChartArea.Border.LineStyle = 0           .Paste           .Export Filename:=fn         End With         .Delete       End With     End With     Me.Image1.Picture = LoadPicture(fn)     Kill fn   End If End With と、.Chart.Exportメソッドを使って一旦ファイル作成し、読み込み後 Kill で削除します。 『画像ファイルから読み出すこと』になるのでボツかもしれませんが....

miya_HN
質問者

お礼

今更ですが、お礼の記載が大変遅くなり、申し訳ありません。 ありがとうございました。

miya_HN
質問者

補足

APIを使って全く作ったことがないので「QNo.2885043」 のプログラムが全く理解できませんでした。 初心者なのですいません。 そのようなことを書いているおすすめのサイトや本などはあるのでしょうか? よろしくお願いします。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

意図されているものと異なるかも知れませんが、、、 シート上ではなくて、UserForm に Image1 と Image2 を持たせて Visible を切替えるとか。

miya_HN
質問者

お礼

なるほど、そういう手がありますね。 本当はワークシート上で画像を表計算のデータと同じようにデータとして扱って作りたかったのですが、参考にします。 ありがとうございました。

関連するQ&A