人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【Microoft Word マクロ/VBA】ワードマクロで段落が表かどうか判定したい
現在Word文書をwiki書式に変換するマクロを作成しています。
SelectionからParagraphをループさせてStyleを判定することはできているのですが、途中に表が含まれる場合にはTableを取得してRowによるループに切り替えたいと思っています。
現在のParagraphが表に入ったかどうかを判定するにはどうしたらよいでしょうか。


もしかして「そういうマクロがここで公開されてるよ」という回答であってもうれしいです。

●質問者: memo77
●カテゴリ:コンピュータ インターネット
✍キーワード:VBA Wiki Word マクロ ループ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kn1967
●100ポイント ベストアンサー

WordVBAは利用経験あまりないので、

まとめているサイトを探して軽く動かしてみただけなのですが・・・。

Word VBA コマンド 辞典

If Selection.Information(wdWithInTable) = True Then
 MsgBox "列: " _
 & Selection.Information(wdMaximumNumberOfColumns) _
 & vbCr & "行: " _
 & Selection.Information(wdMaximumNumberOfRows)
End If

selectしているものがtableかどうかを判別して、

tableなら列数と行数を取得し、ループを内部で行って適宜整形。


※余談になりますが、xml形式(あるいはhtml形式)で保存して、

それをパースしたほうが、目的を早く達成できるのではないでしょうか?

ExcelVBAなら良いのですが、WordVBAは相談相手少ないですよね・・・。

◎質問者からの返答

ありがとうございます。無事判定できました。

本当にワードマクロは情報が少ないですよね。


XMLにも余計な要素が山のようにありそうで考慮しなかったんですけど、見てみました。やっぱり大量に無駄な要素があって読み解きたくないXMLでした(笑)

あと外で加工すると別ツールになっちゃいますけど、ワードマクロだと使える人が多いかなー、と思ってます。「選択した範囲だけ」みたいなこともできますし。


現在マージしたセルに苦闘中。

安定して動くようになったら公開します。使ってくれる人はいるかなぁ。


2 ● jccrh1
●10ポイント

「Range.Cells.Count」で表か判断できると思います。

※実際にテストした結果ですので、マニュアルと合っているかは保証できませんが…

もし表でなければエラーになり、表の場合は1か0を取得します。

1は表の中、0は表の行末?

I = ActiveDocument.Paragraphs(n).Range.Cells.Count

入力されている文字を取得

文字 = ActiveDocument.Paragraphs(n).Range.Text

表を行と列でループで処理する場合はTablesオブジェクトで対応すると思います。

ActiveDocument.Tables.Count
ActiveDocument.Tables(n).cell(行,列).Range.Text
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ