Microsoft Offie Word 2003 (OS; Windows XP)で、
以下のように、数値が羅列されたテキストがあります。
01 05 02 06 42 35 82
22 99 03
10 43 53 72 04 11
21 22 01 34
09 99 33 99 81
32 08 63 58 92 34 71 43
ここで、この数値の中に 99 を含んでいる行の行末に
”発見!”という文字列を追加したいと思っています。
(1行中に複数の 99 があっても行末に1つ”発見!”を追加)
このような結果を得たいのです。
01 05 02 06 42 35 82
22 99 03 発見!
10 43 53 72 04 11
21 22 01 34
09 99 33 99 81 発見!
32 08 63 58 92 34 71 43
サンプルコードを示して頂ければ幸いです。
宜しくお願い致します。
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
ご回答ありがとうございます。
Javaで正規表現検索・置換を行うほうが処理的には簡単なことは
分かるのですが、これだとエディター,ファイル入出力やUndo/Redo等の
GUIを構築する部分が大変だったりしますよね...
個人で使うだけなら、ファイルをダイレクトに処理すれば済む事なんですが、
私以外の人がテキスト編集作業もひとつの環境で行う必要があるので
万人が使い慣れたワードをGUIとして使用するのが良いかと思ったのですが、
個人的にはワードマクロが全く分からないので迷うところです。
もう少し、悩んでみようと思います。
No.3
- 回答日時:
こんばんは。
>どうもその機能が貧弱そうなのでJavaで開発することにしました。
一応、これで完結だと思うのですが、もしも、完全に言語で開発するつもりだったら、それなりの言語はいくつもあります。また、WYSIWYG にするつもりで、Wordを選択したなら、それは間違いです。Wordには、もう一つ、ファイルサイズ・32MBの制限が存在しています。また、GUIのコマンドの表示系を整える機能は、VBAには残念ながらありません。
他の言語を扱っている方が、「VBA自体を下にみる」言い方をする人は多いのですが、私自身も、いくつか他の言語は扱っても、VBAに戻ってきて、場合によって悪くない、思いのほか、優れて便利だといわざるを得ない部分があります。特に、複雑な計算を自分で作るよりは、C言語処理を借りた非常にすばらしい演算を使えます。
たぶん、違う言語系からみると、VBAやVBは、曖昧な部分も多いので、分かりにくいのだろうとは思います。ただ、「機能が貧弱」というなら、こちらの未熟さも原因しているだろうということになりますが、私は、そのカテゴリの範囲で、私の知っている範囲で、質問者さんに、何とか満足に結びつけようとします。私は、VBAは、5年ぐらい扱っています。また、Word VBAを扱う人は、ネットの中でもそんなに多くありません。ですから、最後に、こちらの評価はとかもく、そのような全体に関わるような発言には、とても残念だと思います。
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
前にも書きましたが、編集作業の環境も同時に必要なのです。
ですから、Wordのマクロが最適かと考えていましたが、
どうもその機能が貧弱そうなのでJavaで開発することにしました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Excel(エクセル) Excel 値を返す数式についてです 3 2022/11/21 20:08
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) 列の最終行に新たに入力されたらその値を自動参照 1 2023/01/21 09:59
- その他(Microsoft Office) Excel 2列の値を返す数式についてです 1 2022/11/23 22:59
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Visual Basic(VBA) 先頭と末尾を指定して連続した数字を入力 1 2022/09/14 13:12
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
もし世界に一つの言語しかなか...
-
関係代名詞がない言語は日本語...
-
思考するのに言語は必要か・・・
-
世界初の通訳はどこで勉強する...
-
数字は世界共通なのに、 なんで...
-
言語は元々一つだった?
-
世界の言語の近似度が分かるサイト
-
エクセルで別シートから一括置...
-
エクセルのテキストファイルウ...
-
『謎のカンマ』!?
-
You make me happy when skies ...
-
明星学園「にっぽんご」 教育の...
-
"I can confirm my attendance....
-
ベル・エス・ホリマクは何語?
-
チョムスキーの文法って難しい...
-
高校古典の教え方について
-
羅羅辞典、希羅辞典て 存在する...
-
「その客観性のなさがお前の悪...
-
国文法?の教科書の中でおすす...
-
「現代日本語文法概説」の限界...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日本語以外のモーラ言語
-
世界の言語の近似度が分かるサイト
-
有節言語って?
-
もし世界に一つの言語しかなか...
-
考え方と考えの違い
-
国の言葉・文法はなぜこうも違...
-
エクセルで別シートから一括置...
-
思考するのに言語は必要か・・・
-
アイヌ語と朝鮮語の関係性
-
エクセルのテキストファイルウ...
-
数字は世界共通なのに、 なんで...
-
~スタン
-
言語は元々一つだった?
-
関係代名詞がない言語は日本語...
-
語彙は体系をなすとはどういう...
-
ロマンシュ語・クレオール語で...
-
もしも世界中の言語を一瞬にし...
-
方言と他言語との違いは?
-
Excelのメニュー表示を日本語に...
-
世界初の通訳はどこで勉強する...
おすすめ情報