• ベストアンサー

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

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

  • mygsk
  • お礼率45% (22/48)

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

  • ベストアンサー
  • 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

  • 【Excel】リストボックスからのグラフ表示方法

    教えてください! 今、フォームで表示されたリストボックスから一つ項目を選択しOKボタン(CommandButton1)を押すと、すでに別のワークシートに作成されたグラフが今開いているシートにユーザーフォームで表示されるというファイルを作成しています。 グラフがユーザーフォーム内に表示されるというのは出来たのですが、項目数が7つあるリストボックスからそれぞれ選択すると、 AAA→グラフ1 BBB→グラフ2 CCC→グラフ3 DDD→グラフ4  ・  ・  ・ という風に「リストボックスのこの文字を選択しOKボタンを押すと、このグラフが表示されるようにする」といったようなマクロを完成させたいのです。 ちなみにグラフが表示されるようにするのに、以下のような記述をしました。 ------------------------------------------------- Worksheets("グラフ1").ChartObjects(1).Chart.Export ThisWorkbook.Path & "\Chart1.gif" UserForm1.Image1.Picture = LoadPicture(ThisWorkbook.Path & "\Chart1.gif") UserForm1.StartUpPosition = 1 UserForm1.Show ------------------------------------------------- 困っています。 教えてください。宜しくお願いいたします。

  • ユーザーフォームでのグラフ表示

    今,エクセルのユーザーフォームでグラフを表示させたいのですが,うまくいきません. ユーザーフォームを作成しているブックとは違うブックのシート1にデータ,このデータを使用してsheet2にグラフを作成しています.このグラフを違うブックで作成しているユーザーフォームで表示させたいのです. 今,組んでいるマクロは以下のようになっています. Sub point1() openfilename = "1F-1.xls" folderpath = "G:\関電営業所\相生営業所\20110928 関電相生営業所収集データ\おんとり\text\Excel\" Ofilenamepath = folderpath & openfilename Workbooks(openfilename).Worksheets(2).ChartObjects(1).Chart.Export ThisWorkbook.Path & "\Chart1.gif" UserForm1.Image1.Picture = LoadPicture(Ofilenamepath & "\Chart1.gif") UserForm1.Show End Sub 上から5行目のところでエラーが出てしまいます. エラーは「オブジェクトが不正です」とでます. どなたか解決方法を教えてください。

  • Image or Pictureコントロールについて

    VB6でImageコントロールとPictureコントロールを使って簡単なアニメーションを作っている最中に以下の事を気づきました。 Pictureコントロールの場合、背景色がBackgroundColorなのに対し、作成した画像が透過GIFの為かImageコントロールは画像の部分だけ表示されて、後ろの画像に溶け込んだように表示されます。 機能面ではPictureコントロールの方が上(Imageコントロールに無い機能は何かは知りませんが)のような気がしたのですが、この場合の見た目はImageコントロールの方が良いのですが、本来こういうものでしょうか? ちなみにVB.NETはどうなっているのでしょうか?

  • Imageコントロール vba

    Imageコントロールをsheetに直接はりました。 sheetにはったイメージをExcelを開いたときにリンク先のものに変えたいです。 Image1_Click()を使えばクリックすると切り替えることができます。 Image1.Picture = LoadPicture("C:\イメージ.bmp") クリックせずにExcelをひらくと「イメージ.bmp」を参照して画像が変わるようにしたいのですが、どうしたらよいでしょうか。

  • エクセルのプログラムでイメージコントロールで表示した画像のサイズを変更したり移動する方法

    エクセルでまずユーザーフォーム、イメージコントロール、コンボボックス(サイズ変更)、スクロールバー(表示位置)を作り、 Set イメージ.Picture = Load Picture("C\xxx.xxx") というようにイメージコンロールに画像を表示させ、イメージコントロールのサイズや位置を変えることなくその中にある画像の部分のみサイズや表示位置を変えたいのですがどのようにすればよいのでしょうか? MoveメソッドやPictureSizeModeを使うとイメージコントロール自体が変わってしまいます。 回答よろしくお願いします。

  • VBA フォームでチャートグラフ作成 Excel

    Excel2003を使用しています。 フォームのコントロール(ChartSpace)Microsoft Office Chart 11.0 を利用することにしました。 これを利用し、UserForm1にチャートグラフを作成したいと考えています。 データがあるシートを参照し、グラフを作成し、 フォーム上に表示したいです。 複数のグラフを表示する方法も教えて頂けるとありがたいです。 よろしくお願い致します。

  • コントロールの挿入と同時に画像を表示する方法

    アクティブエックスコントロールのイメージコントロールの設置と同時に、 画像をそのコントロールに表示するvbaを作ってるのですが、 実行時エラー438が発生します。 Sub test() Dim objOLE As OLEObject Set objOLE = ActiveSheet.OLEObjects.Add("Forms.Image.1") With objOLE .Name = "Image" .Picture = LoadPicture("C:\1.gif") End With End Sub C:\1.gifのパスをブラウザで表示させることはできるので、ファイルは存在しているし、 パスは間違っていません。 .Picture = LoadPicture("C:\1.gif") をコメントアウトすれば正常にコントロールが挿入されます。 コントロールの挿入と同時に画像を表示する方法を教えてください。 ご回答よろしくお願いします。

  • エクセルでもgif画像を背景を透明にして表示させる

    アクセスのフォームにイメージコントロールを設置して、gifイメージを静止画で挿入した際は、 画像に背景色がついていても透明で表示されるのですが エクセルにイメージコントロールを設置して、 同じgif画像を表示させると背景の色がついてしまいます。 エクセルでもgif画像を背景を透明にして表示させるには どうすればいいでしょうか?

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

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

  • エクセルのシート中のデーターをMSchartでグラフ表示したい

    エクセルを使うのだったらそのままグラフを表示させればよい。 と思われる方が多いだろうと思いながら質問させていただきます。 エクセル上でフォームを作成し、その上へMSchartコントロールを貼り付けます。 そして、現在アクティブになっているシートのA1~A20のデーターをもとにグラフを表示させたいと思っています。 この時、A1~A20のデーターを直接MSchartで読み込む方法がありますでしょうか。 よろしくお願いいたします。