一端,忙しい時が過ぎました。
データ処理に追われた日々が一段落。
WordをVBAで操作できるようになったことは,非常に役に立ちました。
Wordでできている30行✖20列くらいの表を10種類くらい。
けっこう空白のセルも多いんですが,細かく分かれているので普通に作るのはとっても大変です。
一つのソースデータをいろいろなキーで抽出して作るわけなのですが,今までだと,Excelでソースを作って,貼り付けるか,貼り付けが困難な場合は手入力していました。
非常に面倒な作業だったんですが,VBAで直接Wordに流し込めるというのはとても楽です。
元ソースが二次元配列のコレクション
コレクションから条件に合うコレクションを抽出して,それを配列に放り込んで,表の状況に合わせて配列の段階で微調整をする。
最後に流し込むように具体的な表に流し込む。
体感では,もう組めたけど本当にこんなんでうまくいくんだろうか,簡単すぎやしないかと毎回思うほどデータの処理が楽です。
コレクションとクラスモジュールで作る構造体の組み合わせはとてもいいですね。For Eachが使えるのも極めて好みです。
VBA HandBookでコレクションのところを読んでいて,For Eachを使える状況っていうのは恵まれた良い環境なんだなぁと感じました。
thomさんに教えてもらって最初からその状況を味わえたわけですが,とてもよく機能する。
単に使うという段階でなら,もうそれなりの回数使い,コードを書きかえ,必要なレポートを出すということを繰り返しているので,
ほんとしっくりしてきているんですが,0から作るのはまだまだできません。
もうちょい精進がヒツヨウデス。
こちらのほうをもっと経験したいんですが,今はディクショナリーのほうがあいまい極まりないので,そこの勉強から先にしないとな。
きっと便利なものなので,きちんと自分で消化して,まとめておきたい。
やりたいことは多岐にわたるけど,まずはそこから知識を深めたいと思っているところです。
そうそう,今回Word VBAで表にデータを流し込むとき,一つ注意しなければいけないことがありました。
Wordの表では,セルの結合をすると,ずれが生じます。
そこに気を付けながら,やらないといけない。
行,列を流し込んだコードは次の通り
Sub Test() Dim Doc As Document: Set Doc = ActiveDocument Dim TargetTable As Table: Set TargetTable = Doc.Tables(1) Dim c As Cell With TargetTable For Each c In TargetTable.Range.Cells c.Range.Text = c.RowIndex & "," & c.ColumnIndex Next End With End Sub
cellに対してFor Eachが使えるのはとてもいいですね。Powerpointではそうはいかない(ノД`)・゜・。
じゃ配列そのまま貼れるのかな 試してみないとな。。
単純にすべてのセルに行,列を貼るというコードなわけですが,結合によりずれているのがわかると思います。
ここは大きな注意点ですね。
とはいえ,Powerpoint並みにもうWordVBAも制御できそうな気がするのは,ひとえにPowerpointで遊んだおかげです。
うれしいなぁ