• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Word2003文字列挿入(追加)のマクロ)

Word2003文字列挿入(追加)のマクロ

このQ&Aのポイント
  • Microsoft Offie Word 2003で、数値の中に99を含んでいる行の行末に「発見!」という文字列を追加するマクロを作成したい。
  • サンプルコードを教えていただけると助かります。
  • 要望: 数値が羅列されたテキストがあり、その中に99を含んでいる行に「発見!」という文字列を追加するマクロをWord2003で作りたい。サンプルコードをご教示いただければ幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 どうみても、それは、Word向きの内容ではありません。 できないとは言いませんが、プロパティに現れますが、Wordの一般ドキュメントには、Excelのような「行」という明確な概念がありません。その代わりにに、「パラグラフ(以下のマクロをご覧ください)」というものがあるのですが、それは、「行」とは意味が違います。出来れば、Wordを表(Table)にするか、Excelのワークシートで関数で行ったほうが確実のような気がします。 以下は、Wordのマクロのサンプルです。 なお、999 は、検索の対象外です。あくまでも、99 として検索します。 Sub paraNum() '末尾に文字を挿入する Dim aPara As Paragraph '検索語 Const SRWORD As String = "99" Selection.HomeKey Unit:=wdStory Selection.EndKey Unit:=wdStory, Extend:=wdExtend If Selection.Type = wdSelectionNormal Then   For Each aPara In Selection.Range.Paragraphs    With aPara     If InStr(1, " " & aPara.Range.Text & " ", " " & SRWORD & " ", vbBinaryCompare) > 0 Then     With .Range      .MoveEnd Unit:=wdCharacter, Count:=-1      .Collapse Direction:=wdCollapseEnd      .InsertAfter Text:=" 発見!"     End With     End If    End With   Next End If End Sub

HarukaV49
質問者

お礼

ご回答ありがとうございます。 Javaで正規表現検索・置換を行うほうが処理的には簡単なことは 分かるのですが、これだとエディター,ファイル入出力やUndo/Redo等の GUIを構築する部分が大変だったりしますよね... 個人で使うだけなら、ファイルをダイレクトに処理すれば済む事なんですが、 私以外の人がテキスト編集作業もひとつの環境で行う必要があるので 万人が使い慣れたワードをGUIとして使用するのが良いかと思ったのですが、 個人的にはワードマクロが全く分からないので迷うところです。 もう少し、悩んでみようと思います。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 >どうもその機能が貧弱そうなのでJavaで開発することにしました。 一応、これで完結だと思うのですが、もしも、完全に言語で開発するつもりだったら、それなりの言語はいくつもあります。また、WYSIWYG にするつもりで、Wordを選択したなら、それは間違いです。Wordには、もう一つ、ファイルサイズ・32MBの制限が存在しています。また、GUIのコマンドの表示系を整える機能は、VBAには残念ながらありません。 他の言語を扱っている方が、「VBA自体を下にみる」言い方をする人は多いのですが、私自身も、いくつか他の言語は扱っても、VBAに戻ってきて、場合によって悪くない、思いのほか、優れて便利だといわざるを得ない部分があります。特に、複雑な計算を自分で作るよりは、C言語処理を借りた非常にすばらしい演算を使えます。 たぶん、違う言語系からみると、VBAやVBは、曖昧な部分も多いので、分かりにくいのだろうとは思います。ただ、「機能が貧弱」というなら、こちらの未熟さも原因しているだろうということになりますが、私は、そのカテゴリの範囲で、私の知っている範囲で、質問者さんに、何とか満足に結びつけようとします。私は、VBAは、5年ぐらい扱っています。また、Word VBAを扱う人は、ネットの中でもそんなに多くありません。ですから、最後に、こちらの評価はとかもく、そのような全体に関わるような発言には、とても残念だと思います。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 話が良く見えてこない部分があるのですが、もし、テキストファイルでしたら、別にWord自体は不要だと思いますね。WordのVBA やExcelのVBAだけで、表示は必要ありません。 ただ、もう少し突っ込むなら、Windows のWsciptで、RegExpの正規表現を使い、ドラッグ&ドロップで、作ることが出来ます。その正規表現を工夫すれば、複雑なものでも検出すると思います。今は、ファイル名は、出力側には、先頭に「t_ 」が付きます。VBAのほうが簡単ですが、WordもExcelもなしにも出来るというために、書いておきます。なお、全角スペースが入ると、エラーになりますから、気をつけてください。 ---------------------------------------------------------------------- 'FindNumber.vbs 'エクスプローラからドラッグ&ドロップしてください。 Dim objFso Dim fname Dim objTxIn Dim txOut Dim objTxOut Set objFso = CreateObject("Scripting.FileSystemObject") On Error Resume Next fname = WScript.Arguments.Item(0) If Len(fname)=0 Then MsgBox "ファイルがありません" WScript.Quit End if If objFso.GetExtensionName(fname) = "txt" Then Set objTxIn = objFso.OpenTextFile(fname) path = objFso.GetParentFolderName(fname) & "\" txOut = path & "t_" & objFso.GetFileName(fname) Set objTxOut = objFso.CreateTextFile(txOut) Set objRegexp = New RegExp With objRegexp .Pattern ="\b99\b" .Global=True End With Do Until objTxIn.AtEndOfStream =True txTmp = objTxIn.ReadLine() If objRegexp.Test(txTmp) Then txOut = txTmp & " 発見!" Else txOut = txTmp End If objTxOut.WriteLine(txOut) txOut ="" Loop objTxOut.Write(txOut) objTxIn.Close() objTxOut.Close() MsgBox("終了") Else 'CSVファイル以外の場合 MsgBox("テキスト・ファイルをドロップダウンしてください") End If Set objFso = Nothing

HarukaV49
質問者

お礼

前にも書きましたが、編集作業の環境も同時に必要なのです。 ですから、Wordのマクロが最適かと考えていましたが、 どうもその機能が貧弱そうなのでJavaで開発することにしました。 ありがとうございました。

関連するQ&A