【Microoft Word マクロ/VBA】ワードマクロで段落が表かどうか判定したい

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


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

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/12/23 20:03:08
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kn1967 No.1

回答回数2915ベストアンサー獲得回数301

ポイント100pt

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は相談相手少ないですよね・・・。

id:memo77

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

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


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

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


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

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

2009/12/23 20:02:35

その他の回答1件)

id:kn1967 No.1

回答回数2915ベストアンサー獲得回数301ここでベストアンサー

ポイント100pt

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は相談相手少ないですよね・・・。

id:memo77

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

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


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

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


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

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

2009/12/23 20:02:35
id:jccrh1 No.2

回答回数111ベストアンサー獲得回数19

ポイント10pt

「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
  • id:memo77
    id:jccrh1さんの回答に気付かず質問を終了してしまいました。すみません><
    id:kn1967さんの回答で解決はしているんですが、別途ポイントをお送りしておきます。
  • id:jccrh1
    memo77さん
    お気遣い、ありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません