.ExportメソッドでExcelグラフをGIFにできたので、 少し、テストして遊んでみます。
↓解説・テスト動画↓
<Excelのグラフをgifへ変換 .Exportメソッド使用>
こんにちは、三流プログラマーKen3です。 今回は、 Excelのグラフをgifへ変換 して遊んでみます。 /* * 1. ActiveChart.Export ("C:\samp.gif") */ 昔か書いてたメルマガに、 Excelのグラフをgifへ変換 があったので、今回は、これをネタに話を大きくしてみます。 *昔のメルマガも整理しないとなぁ Excel97 で、グラフが表示されています。 このグラフを画像ファイルとして保存したいのですが、 どのような操作をすれば、よいのですか? *Excelで作成したグラフをHPに載せたいので、 AAA.GIFにしたいのです。 .Exportってメソッドあるので、VBAからは、 ActiveChart.Export ("C:\samp.gif") みたいな感じで、GIFファイル作成できるみたいです。 VBAでグラフをGIFにした、 サンプルを載せます。 Sub test028_1() 'ブックを新規に作成 Workbooks.Add '適当なデータをセット Range("A2").Value = "東京" Randomize '乱数初期化 Range("A2").Value = "東京": Range("B2").Value = Int(Rnd * 100 + 1) Range("A3").Value = "神奈川": Range("B3").Value = Int(Rnd * 100 + 1) Range("A4").Value = "埼玉": Range("B4").Value = Int(Rnd * 100 + 1) Range("A5").Value = "千葉": Range("B5").Value = Int(Rnd * 100 + 1) 'グラフを追加、、マクロ記録で作成したコードをコピー Charts.Add ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("A2:B5") ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1" 'ブックと同じ位置に 'グラフをGIFファイルで保存 ActiveChart.Export (ThisWorkbook.Path & "\test028.gif") '↑VBAでGIFに保存できるので、それなりに使えるかも End Sub '---- ポイントは、 Chartオブジェクトのメソッド .Export メソッド で、 ブックと同じフォルダーに保存したかったので、 ActiveChart.Export (ThisWorkbook.Path & "\test028.gif") と指定しました。 /* * 2.表示されているグラフを保存するボタンを作成 */ 上のサンプルでは、 新規にグラフを作成して、GIFにしたけど、 実際の業務では、グラフは既にあって(元は事前に作ってあって)、 データを入力する状態になってると思います。 Print Screen KEYを押して、 グラフィック編集ソフトで切り取り や Shiftキーを押しながらメニューの編集・図のコピー をやらなくてすむように、 表示されているグラフをGIF保存するマクロを作ってみます。 まず、問題なのが、 Chartオブジェクトの数や指定する方法かなぁ。 Sheetオブジェクトの中にChartObjectsがあって 何? えっと、埋めこみグラフってのは、シートの下にぶら下がってるんですよ。 なので、指定する時は、 ActiveSheet.ChartObjectsとやります。 へぇ〜そうなんだぁ。 サンプルのtest028-book.xlsファイルを http://www.ken3.org/vba/lzh/vba028.lzh に圧縮したので、解凍してみながらのほうがわかりやすいかも。 ア.グラフの数を数える サンプルでは、横棒グラフと円グラフを用意してます。 シートにグラフがいくつ埋めこまれているか調べるには、 .Countプロパティを参照します。 ActiveSheet.ChartObjects.Count イ.個々のグラフ情報にアクセスするには? 個々のグラフの情報にアクセスするには、 ActiveSheet.ChartObjects(1) と ActiveSheet.ChartObjects("グラフの名前") の2つのやり方があります。 アのグラフの数を数えるプロパティを参照して、 ループで回すことができます。 Sub test028_2() Dim n As Integer 'n番目のカウンターで使用 Dim strFNAME As String 'ファイル名 'グラフの枚数分処理を行う For n = 1 To ActiveSheet.ChartObjects.Count 'ファイル名を作る strFNAME = ThisWorkbook.Path & "\test028-" & n & ".gif" '.Exportでgif出力 ActiveSheet.ChartObjects(n).Activate ActiveChart.Export (strFNAME) '保存確認メッセージを表示 MsgBox ActiveSheet.ChartObjects(n).Name & "を" & strFNAME & "へ保存しました" Next n End Sub '--- For n = 1 To ActiveSheet.ChartObjects.Count で、グラフの枚数分ループを行います ファイル名をtest028-1 -2 と連番で作ります strFNAME = ThisWorkbook.Path & "\test028-" & n & ".gif" グラフを選択、出力します ActiveSheet.ChartObjects(n).Activate で選択 ActiveChart.Export (strFNAME) で出力 おまけで、確認メッセージを表示します。 MsgBox ActiveSheet.ChartObjects(n).Name & "を" & strFNAME & "へ保存しました" /* * 3.終わりの挨拶 */ 今回は、 ・Excelのグラフをgifへ変換 でした。 予定では、 HTMLファイルの作成、FTPを起動して、自動でサーバーにUPする も含めたかったけど、気合が足りなく、今回は無しで。 少しがんばれば、下記のような処理も可能ですね。 ボタンが押されたら、 Excelのシートを 自分で(VBAで) HTMLファイル化して(グラフもGIF画像にして、) FTPを使用して自動的にサーバーもっていく。 今回のサンプルは、 http://www.ken3.org/vba/lzh/vba028.lzh に保存してあります。 解凍してtest028-book.xlsを開いて、 内容を変えたりして、遊んでください。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。
ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、
感想や質問・要望・苦情など 三流君へメッセージを送る。
下記のフォームからメッセージを送ることができます。
Blogとリンク:[三流君のMemo別館]/
[VBA 三流君のソースコード置き場]/
[Ken3Video YouTubeで動画解説]
気になったジャンル↓を選択してください。
人気記事(来場者が多いTOP3):
[VBAでIE,WebBrowserを操作]・・・VBAでIE,WebBrowserを操作する サンプルです
[Access から Excel 連携 CreateObject("Excel.Application")]・・・AccessからExcelを操作したりデータの書き出しなどです
[VBAでOutlookの操作 CreateObject("Outlook.Application" )]・・・VBAからOutlookを使い、メール関係を処理するサンプルです
↑上記3つみたいなCreateObjectで他のアプリケーションを操作するサンプルが人気です。
Excel関係:
[Excel UserFormを操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
[ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
[Excel関係 関数、その他]・・・その他Excel関係です
Access関係:
[Access UserForm/サブフォーム 操作]・・・アクセスでフォームを使ったサンプルです
[Access レポート操作]・・・レポートを操作してみました
[Access クエリーやその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
その他:VBAの共通関数やテキストファイルの操作など
[VBAでテキストファイル(TextFile)の操作]・・・普通のテキストファイルを使ったサンプルです
[VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます
※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。
※※読んで、気分を悪くされたらスミマセン。