古庄 潤(ふるしょう じゅん)
本業はエンジニア。ICに様々な機械をつなぎ,電流やら電圧を測定する。もちろん,これらの測定器もVBAでコントロールし,取り込んだデータもマクロで処理する。人呼んで,マクロの鬼軍曹!
今回のサンプルは、Excel2002/2003/2007での動作を確認しています

「あら、先生、緑茶ですか?」
「うむ、わしは無類のお茶好きでな」
「やっぱり、玉露ですか?」
「ふぉっふぉっふぉ、高級なお茶と言えば玉露ですか?」
「そうじゃないんですか?」
「まぁ、確かに玉露は手間暇かかっているから高い」
「でしょ?」
「しかし、人にはそれぞれ好みというものがある」
「そうなんですか?」
「君は、ヒレステーキは好きかね?」
「私は、サイコロステーキの方が好きです」
「あちゃ~、君はファミレスでしかステーキを食ったことがないのか?」
「もちろん!サイコロステーキは最高です。それが何か?」
「むむぅ・・・お待ちの患者さんど~ぞ~」

今月の相談
 Excelで作成したグラフをHTMLファイルで利用することになり、画像ファイルとして保存する必要が出てきました。スクリーンショットで処理するには数が多く、途方に暮れています。マクロでどうにかならないでしょうか?私に魔法の呪文を授けてください

「魔法の呪文だなんて」
「初心者にとって意味不明のコードは、魔法の呪文と同じじゃ。ゲール君だってそうだったじゃろ?」
「さぁ・・・忘れました。過去には縛られたくないので」
「過去に縛られたことがあるのかな?」
「・・・。ところで先生、グラフを画像ファイルにするコマンドなんてあるんですか?」
「グラフを画像ファイルにするのは至って簡単、たった1行のステートメントで実現できる」
「あらま」
「ゲール君でも解けると思うよ」
「そうですねぇ。コピー&ペーストとか」
「う~ん、コピーはいいとして、ペーストは・・・」
「何か問題でも?ペイントを開いてペースト!これで画像ファイルになるでしょう」
「ほほぅ!で、ペイントをどうやってVBAでコントロールするのかな?」
「あら?わたくしとしたことが・・・」
「どうかな?」
「できましぇ~ん」
「であるねぇ~」
「じゃあ、どうやるんですか?」
「Exportメソッドを使うんじゃ」
「Exportメソッド?」
「♪そう!魔法の呪文、Exportメソッド!」
「わかった、わかりましたから、歌ってないで早く教えてください」
「では、ちちんぷいぷいの・・・えい!」

リスト1●グラフを画像ファイルとして保存するマクロ(JPG)。Exportメソッドを使って、グラフを画像ファイルにして保存する
Sub test1()
    Dim myRess As Variant

    myRess = Worksheets(1).ChartObjects(1).Chart.Export( _
            ThisWorkbook.Path & "\test.jpg", "JPG", False)

End Sub

「なんと、しょぼいコード」
「しょぼいとはなんじゃ」
「すいません。あまりにも短いコードだったので。では、解説をお願いします」
「うむ、グラフに対してExportメソッドを実行すると、画像ファイルとして保存できる」
「なるほど」
「第1引数に、保存する画像ファイルのパスとファイル名を指定する」
「ファイル名だけでは駄目なんですか?」
「パスを省略すると、カレントディレクトリに保存される。ユーザーがカレントディレクトリを把握していれば問題ないが、把握していない場合、どのフォルダに保存されたのかわからなくなってしまう危険性がある」
「カレントディレクトリって、何ですか?」
「カレントディレクトリとは、現在作業中のディレクトリのことじゃ」
「え~っと、そのディレクトリがわからないのですが」 「おぉ!ゲール君はWindows世代じゃったな」
「その意味もよくわかりませんが」
「DOS世代ではないという意味じゃ」
「もちろん、違います」
「UNIXの世界では、今でも使われている言葉なんじゃが、乱暴に言ってしまえば、ディレクトリ=フォルダじゃな」
「だったら、カレントフォルダって言えばいいのに」
「むむぅ・・・」
「どうして、そんな古い言葉を使っているんですか?」
「それはWindowsにもDOSの名残があるからなんじゃ。コマンドプロンプトを知っておるかな?」
「使ったことはありませんが」
「コマンドプロンプトの中でカレントディレクトリを変更する場合CD或いはCHDIRコマンドを使う。これは、Change Directoryを省略したものなんじゃ」
「へぇ~、で?」
「CDがチェンジフォルダでは、おかしかろう?」
「まぁ、そうですが。コマンドもCFにしてしまえば?」
「それでは、DOS世代の我々は混乱してしまう。それに、VBAにもカレントディレクトリを取得するCurDir関数や、カレントディレクトリを変更するChDirステートメントがあるんじゃ」
「ん~、Windows世代の私にはよくわかりませんが、まぁ、よしとしましょう」
「WindowsでGUIとなってから、カレントディレクトリを意識する必要はなくなった。と、同時に相対パスも使われなくなり、ファイルを開いたり、保存する場合は、絶対パスで指定することが一般的になったというわけじゃ」
「便利なような、不便なような」

「第2引数に、保存する画像ファイルのタイプを指定する。第1引数のファイル名の拡張子で判断できるから、この引数は省略しても構わない」
「そうだ!画像ファイルって、色んな種類がありましたよね?」
「例えば?」
「ビットマップとか、ジェーペグとかピングとか」
「そうじゃな。画像ファイルには用途に応じていろいろなタイプがある」
「どれにでも変換できるんですか?どのタイプの画像ファイルでも保存できるんですか?」
「うむ、VBAのヘルプには詳細な記述がなかったから実際にやってみた」