読者です 読者をやめる 読者になる 読者になる

Powerpoint VBAを使おう!

Powerpoint VBAやExcelのVBAで遊んでいます。Word VBAも始めました。

Directoryと戯れる つづき

chemiphys.hateblo.jp

つづきです。前回混乱していた理由がだいたいつかめたので,ローカルウィンドウの表示にまどわされないように,と考えながら使うと,当然ですが普通に使えます。

いかに感覚で使って,ローカルウィンドウ任せだったかがよくわかる(;´▽`A``


もうひとつ落とし穴があり,今日少し時間がかかりました。

それは,WordにもDictionaryというオブジェクトがあること。
Dictionary オブジェクト (Word)(機械翻訳)

職場では今,WordもVBAで制御するために参照設定しているので,しばしひっかかりました。

対処方法としては,

Dim dic as Scripting.Dictionary

と書くだけでいけます。当たり前ですよね。。 Applicationという同名のオブジェクトが各Officeアプリにあり,

Dim WordApp as Word.Application とか
Dim PptApp as Powerpoint.Application とか
Dim XlApp as Excel.Application

と書いていたわけです。名前が重なることくらいアルニキマッテマスヨネ。

Dictionaryオブジェクトがやっとつかめてきたので,thomさんのこの記事の

thom.hateblo.jp

最後のところが,なぜとても良いのかやっと理解できました。

Dictionaryオブジェクトは既に同じキーが登録されていてAddをすると怒りますが,

Dictionaryオブジェクトをdic ,キーをキーと仮にすると,

dic(キー)=dic(キー)+1という書き方で,

そのキーがそれまであるかないかにかかわらず,きちんとカウントしていきます。

そのキーがあるかどうか,新たに追加するかどうかなど気にせずに,とにかく一意なキーを与えて先ほどの書き方をすると,そのキーに該当するデータをカウントしていってくれる。

なので,いくつかのキーになりうる値を全部結合したキーを区切り文字を介してつなげて,それでカウントしていけば後でどうにでも集計ができます。

職場では4つくらいのキーを vbtabで連結してつなげたものをキーとしてカウントしてみました。きちんと動いていた。

こうしておけば,Splitで分けていけますしね。。ほんと何も考えずに集計ができました。。

なるほど,あの時の記事の文章の意味はそうだったのか,と非常に遅ればせながら理解できました。。

そうやって遊びつつ,今はとにかくオフィスアプリそのものの機能を知ろうとする,というかかわり方をするようにしているので,Excelのピボッドテーブルに興味が沸きました。。

けっこう複雑な統計もVBAでどうとでもなってきたので,今まで私はピボットテーブルを使ったことがありませんでした。。

お恥ずかしい話ですね。

ある様式にそのまま貼り付けれるようにピボットテーブルを作るのはそれなりに苦労しそうなので,それならVBAで集計するな,とは思いましたが,

とりあえず,トライアンドエラーで,統計キーを操作してどういうデータが得られるのか,というのを動的にやる,という意味ではピボッドテーブルはすさまじいツールですね。

あんな便利なものがあるのか,と衝撃をうけました。。

または,VBAで組んだものが正しい値を出しているのか,確認にも使えます。ちょっと使い方おかしい気もしますが,私にはそういう使い方が一番多いのかもしれない。

Wordの表などに直接流し込めるようになった今,ピボッドテーブルをVBAで積極的に使おうとはあまり思いませんが,自分のコードの検証には強力です。

今日も勉強になりました(゚▽゚*)