素人がExcelVBAによる「一人働き方改革」に挑むブログスマートフォン用の表示で見る素人がExcelVBAによる「一人働き方改革」に挑むブログExcelVBAネタです。VBA自作メソッド素人、グラフに挑戦するExcelVBAでグラフを描く実は、今までほとんどExcelでグラフを使ったことがなかったのである。グラフを使うことがなかったわけではないが、ずーっと前に誰かが作ったグラフをちょこちょこっといじくる程度で乗りきっていたのである。VBAでデータ分析』(川上恭子著)という本を購入していたのを思い出して引っ張り出してみた。その本によると、118ページ新しくグラフシートを追加して、そのシートにグラフだけを表示します。見た感じ、単にグラフを描くだけなら、ChartsコレクションにAddしたら、(たぶん)新しいChartオブジェクトが得られ、1.で得られたChartオブジェクトのChartTypeプロパティにグラフの種類をセットして、SetDataSourceメソッドでグラフ化する元データを指定するという流れだけっぽい。これだけなら素人の私にもできそうだ。前掲書の119ページには、グラフの種類ChartTypeプロパティに設定する定数を以下のように指定すると、グラフの種類を変更できます。定数には値を指定することもできます。81とあり、ChartTypeプロパティに渡す値を変えれば、同じデータからいろんなグラフが作れそうだ。ちなみに、オブジェクトブラウザーで見てみると、これらの定数は、「XLChartType列挙体」のメンバのようだ。【→参考】とりあえずやってみるまずは、単純に、引数としてグラフの種類を表す定数と、グラフ化する元データの範囲を与えたら、新しいシートにサクッとグラフを作ってくれるマクロを作ってみる。Function引数typeOfGraphがString型であること、あと(*)のgetGraphType(typeOfGraph)がナゾだと思う。getGraphTypeというのは自作Functionなんだから仕方がない。あと、なんでSubじゃなくてFunctionにしているのか、についても後述する。引数でグラフの種類と元データの範囲を受け取って、それをもとにグラフを新規作成する、というだけのマクロ。単独でこのプロシージャを呼び出しても動かない。次のgetGraphTypeが必要になる。Functionすっげータテ長ですまん。見たら分かると思うけど、グラフの種類名を引数として渡したら、その名前に応じた定数を返すようにした。データの入力規則のリストに名前を登録しといたら、それを選ぶだけで良いようにしたのだ。コードを書くのが死ぬほどメンドクサそうに見えると思うけれど、返り値の型を「XLChartType型」にしているので、それほどでもなかった。XLChartTypeのメンバ全てに対応するのはちょっと数が多すぎて嫌になるので、基本的には、前掲書の119ページの表に載っていたものだけに対応した(追加したのは「マーカー付きレーダー」だけです)。その関係で、選から漏れたグラフの種類を指定された場合には、ユーザーを軽く煽ってから、「0」を返すことにした。Functionの条件式がTrueになるので、返り値Falseを持って呼び出し元へ帰る、ということになる。グラフを描いてみるワークシートを、こんなふうに作っておく。A2セルには、データの入力規則で、特定のグラフの種類名しか入力できないように指定しておく。C1:H6にグラフの元データを準備した。いちいちVBEから呼び出すのもメンドウなので、呼び出し用のコマンドボタンも置いておく。エントリポイントのコードは次の通り。makeUserSick("すまん、グラフ描けんかったわwww")が実行される。グラフの種類の指定が正しければ、createGraphの中身が実行されてグラフが追加されることになる。実行結果この状態で実行してみる。A2セルには、「集合縦棒」が入っている。A2セルには「折れ線」。A2セルには「マーカー付きレーダー」。Sub無事、グラフが作成されずに、煽られるだけ、となりますwおわりに現状、ボタンを押したらいきなり新規シートにグラフを作成する、という乱暴なものになっている。Chartオブジェクト関係のオブジェクトモデルをもっとちゃんと理解して、もう少し使い勝手の良いものにしないといけないなあ。»プロフィールid:akashi_keirinExcelVBAネタです。SyntaxHighlighter.all();注目記事はてなブログをはじめよう!akashi_keirinさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。