• ベストアンサー

Imageコントロールにグラフを表示させるには

Excel VBAでフォームにイメージコントロールを配置して、そこにエクセルで作成したグラフ(グラフシート)を表示するようなプログラムは作成可能でしょうか? 例えば、 まずワークシートのデータを元にグラフ(グラフシート)を作成し、作成したグラフをフォーム上のイメージコントロールに表示させる一連の作業をVBAでプログラミングできるかどうかということです。 Userform1.MultiPage1.Image1.Picture = .........といった感じです。 もしくは、作成したグラフをgif形式の画像として特定のディレクトリなりフォルダに保存して、その画像ファイルを読み込むことで対応はできるでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • arata
  • ベストアンサー率49% (139/279)
回答No.4

というわけで、途中まで作りかけたのですが、芳坂和行さんのホームページで、非常に出来のいいクラスを見つけてしまいましたので、芳坂和行さんのものを紹介しておきます。 ■芳坂和行さんのホームページ  http://ww1.cnet-na.ne.jp/h/housaka/ 上記のホームページの http://ww1.cnet-na.ne.jp/h/housaka/excel/persona2.html に「クリップボードから Picture オブジェクトを作成するクラス CClipPicture (Excel97)」というのがあります。(Excel2000でも動作します。) 使い方が書いてありませんので、説明すると 1.上記のページの「クリップボードから Picture オブジェクトを作成するクラス CClipPicture (Excel97)」を右クリックして、「対象をファイルに保存...」でCClipPicture.clsというファイル名で保存します。 2.上記で保存したCClipPicture.clsをExcelのVisual Basic のエディタの、ファイルのインポートで、読み込みます。 3.CClipPicture.clsの最初の方に、コメントになったサンプルがありますので、これを利用します。まず、ユーザーフォームを追加して、ユーザーフォームにボタンを2つと、イメージコントロールを1つ配置します。 4.作成したユーザーフォームのソースに、CClipPicture.clsの先頭のほうにある「UserFormでの使用例」以降の連続したコメントの部分を貼り付け、コメントを除きます。 5.シート名がSheet1であるワークシートにグラフを1つ配置します。 あとは、作成したユーザーフォームを動かして、ボタンのいずれかをクリックすると、イメージにグラフがはりつけられます。 という訳で、うまくいったら芳坂和行さんにお礼のメールでもよろしくおねがいします。

mygsk
質問者

お礼

具体的かつ詳細な回答ありがとうございます。さっそく試してみます。上手くいったら、うまくいかなくてもポイントを差し上げます。有り難うございました。

その他の回答 (3)

  • arata
  • ベストアンサー率49% (139/279)
回答No.3

すいません。Visual Basicのカテゴリだったので、VBでやるのだと勘違いしました。Excelのイメージボックスだとクリップボードからの貼り付けは、Windows APIを使用する必要があると思います。 というわけで、ちょっと調べないと回答でませんが、待てるのであれば、(約束はできませんが)調べてみます。

  • arata
  • ベストアンサー率49% (139/279)
回答No.2

クリップボード経由で貼り付けるというのはどうでしょう。 Private Sub Command1_Click() '参照設定で、Excelのオブジェクトを参照設定してください。 '参照設定しない場合は、下記の変数定義のExcel.ApplicationをObjectにしてください。 Dim objExcel As Excel.Application 'エクセルを起動 Set objExcel = CreateObject("Excel.Application") 'グラフのあるブックを開く objExcel.Workbooks.Open "C:\Text.xls" 'グラフをコピー(適当に書き変えてください) objExcel.Worksheets(1).ChartObjects("グラフ 1").Copy 'クリップボードから貼り付け Image1.Picture = Clipboard.GetData 'クリップボードをクリア Clipboard.Clear 'ワークブックを閉じる objExcel.Workbooks(1).Close False 'エクセルを終了 objExcel.Quit 'オブジェクトを開放 Set objExcel = Nothing End Sub

mygsk
質問者

お礼

有り難うございます。 ExcelのVBAで試してみましたが、 Image1.Picture = Clipboard.GetDataの Clipboardのところでエラーが発生し、 「コンパイル エラー」 「変数が定義されていません」とメッセージが表示されます。 どのように変数を定義したら良いでしょうか ちなみに、clipbordをvariant形で変数宣言しても駄目でした。 よろしくお願いします。

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.1

もし、イメージコントロールを使うなら、クリップボードを経由してコピー&ペーストするようなコードが要るでしょう。(クリップボード関係のAPIを使う) でも、イメージコントロールにはとらわれない方がいいですね。 それよりも、VBのフォームに「Microsoft Excel グラフ」オブジェクトを貼り付ける方が作りやすいと思います。 このオブジェクトの扱いについては、ExcelのヘルプのChartObjectの項目あたりに書いてあると思います。 (このオブジェクトを操作すれば、グラフ作成のすべての工程をVBAで記述できると思います。(実際に試したわけではないです。)

mygsk
質問者

お礼

ありがとうございます。 できればVBAのみでやりたいのです。clipbord, APIに関しては参考にさせていただきます。

関連するQ&A