【MS Word 2003 マクロ】

以下の条件で、文章整形マクロをくみたいと思っています。

不要な行
必要な行
不要な行
必要な行
・・・・・

上記のように不要な行と必要な行が交互に並んでいます。
この中から不要な行だけを削除するマクロを教えてください。

できるだけスマートで柔軟なものをよろしくお願いします。

# 「行」とは文頭 (=直前に改行がある) から改行までを意味します。
# 不要な行と必要な行の間には、1 つの改行を除いて何もありません。
# Win XP、MS Word 2003 です。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2008/04/16 09:33:19
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:airplant No.1

回答回数220ベストアンサー獲得回数49

ポイント100pt

不要な行と必要な行の定義を次のように理解してマクロを作りました。

「スマートで柔軟」かどうかは、わかりませんが、行単位で好きな行の処理が自由にできると思います。

あと、いい点はWordファイルにマクロを書かずに、外から扱えるというところですかね。

行の定義: 行頭から始まって改行で終わる(長さ制限なし)正規表現で「^.*$」と同等

不要な行: 奇数番目の行

下記をxxx.vbsという名前で保存して、対象のWordファイルをドラッグ&ドロップでxxx.vbsに食わせてみてください。別ディレクトリでも複数個でもOKです。

Option Explicit

Dim objWord, objDoc
Dim strArg, myPara, i

Set objWord = CreateObject("Word.Application")
objWord.Visible = True

For Each strArg In WScript.Arguments

    Set objDoc = objWord.Documents.Open(strArg)
    i = 0
    For Each myPara In objDoc.Paragraphs
        myPara.Range.Select
'        MsgBox i
        If i Mod 2 = 0 Then
            objWord.Selection.Delete
        End If
        i = i + 1
    Next

    objDoc.Save
    objWord.Documents.Close
    Set myPara = Nothing
    Set objDoc = Nothing

Next
objWord.Quit

なお、Wordのデフォルト設定の「言語データを埋め込む」をオフにしておくことをお奨めします(「ツール」→「オプション」→「保存タブ」右上付近)。

このオプションがオンだと、保存時に「マイクをオフしておいてください」などのメッセージが出てくることがあります。

id:Nigitama

いつも丁寧にありがとうございます。

上記を参考にして以下のものを作りました。

これをワードのSTARTUPフォルダに入っている自作の.dot に追加して、起動時に読み込み、独自のメニューバーから実行できるようにしてみました。校正ツールの一環ってかんじです。

.vbs で保存してドラッグアンドドロップができるとは驚きです。

今後はその方向も作ってみようと思います。

Sub hoge()

Dim myPara As Paragraph

Dim i As Long

i = 1

For Each myPara In ActiveDocument.Paragraphs

myPara.Range.Select

If i Mod 2 = 0 Then

myPara.Range.Delete

End If

i = i + 1

Next

End Sub

2008/04/16 09:30:28
  • id:airplant
    動作は問題ないのですが、「定義とロジックがマッチしていない」ことに気づきました。すみません。
    0オリジンで始めていますので、mod 2が0のところが奇数です。スマートじゃなかったですね。1オリジンにして、余り1を削除すれば良かった。
  • id:Nigitama
    訂正ありがとうございます。

    i = 1
    ではじめて
    i mod 2 = 0
    で偶数削除にしました。

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

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

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

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