Word文書の途中の文字を判別して消すVBA

このQ&Aのポイント
  • Excelのマクロは少しかじっていますが、Word VBAは全くの初心者です。指定した複数行に渡り、数字か文字かを判別しながら自動で繰り返し削除するVBAマクロのプログラムを教えてください。
  • 質問内容のまとめ:1. 各行の左端から10文字目から始まる半角10文字を削除対象とする。2. 数字のみを削除対象とし、文字はスルーする。3. 操作範囲行を指定できるようにする。1行から1000行の範囲で。
  • Word文書の途中の文字を判別して自動で削除するVBAマクロのプログラムを教えてください。Excelのマクロは少し使ったことがありますが、Word VBAは初心者です。指定した複数行に渡り、数字か文字かを判別しながら繰り返し削除する方法を知りたいです。
回答を見る
  • ベストアンサー

word文書の途中の文字を判別して消すVBA

 excelのマクロは少しかじっていますが、word vbaは全くの初心者です。宜しくお願いします。  例えば、下のように、似かよった文面が複数行ある文書で    [8:50:31] qqe-CF: The building where Q-ty’s friend lives is very old.  [8:50:53] qqe-CF: The town where my father grew up is small.  [8:51:40 | 8:52:14] qqe-CF: That is the school where Q-rex teaches.  [8:52:44] qqe-CF: That is the room where I keep my books.  [8:53:59 | 8:54:14] qqe-CF: This is a picture of the place where we are going for our holidays.  [8:54:33] qqe-CF: This is the place where I fell off my bike.  [8:54:52] qqe-CF: That is the place where we stayed for our honeymoon. ↑ここの左端から半角10文字目から始まる、半角10文字で、それが数字の場合(3行目の「 8:52:14」など)のみを、指定した複数行に渡り、数字か文字かを判別しながら自動で繰り返し削除するVBAマクロのプログラムを教えて下さい。  質問内容のまとめ  1.各行の、左端から半角10文字目から始まる半角10文字を削除対象とする。  2.数字のみを削除対象とし、文字はスルーする。  3.操作範囲行を指定できるようにする。1行から1000行の範囲で。    実際には、1000行以上の文書です。よろしくお願いします

  • mj888
  • お礼率100% (4/4)

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.3

失礼しました。 以下のコードは「文字か、数字かで判断する場合」で置き換えたものになります。 補足の問題点を修正いたしましたのでご確認お願いします。 結果の問題点 1.7行目の文字を削除してしまった。  → 削除処理判定flagが正常に行われていなかったため修正しました。 2.9行目から最終行の間の削除処理が行われていない。  → "["から8文字シフトした後、行末までの文字数が10文字無い場合に    次の行を跨ぎ処理をしていましたので修正しました。  → 末尾まで10文字確保できない場合『[8:31:25 | 8:31:2』などはスキップされます。 気になること・・・ 補足にてご提示の元の文面には以下の統一性がありません。 「を編集しました」と「編集しました」や「]」の有無など行によって結果が異なります。 現在の処理は"["を検索した位置より8文字右へシフトしたところから10文字を抜出し 抜き出した文字が特定文字「数値, ,:,/」であれば削除、それ以外ではればそのまま。 8文字シフトした位置から末尾までで10文字取得できなければ次の"["を検索・・・ としております。 ■VBAコード Sub sample() '変数を宣言 Dim lmoji As String, lVal As String, cVal As String Dim aa As String, pp As String, a As String, p As String Dim flag As Boolean Dim i As Integer   '検索文字を指定   lmoji = "["   'カーソルを先頭へ   Selection.HomeKey Unit:=wdStory   Application.ScreenUpdating = False   'メイン処理   Do     '検索条件を設定     With Selection.Find       .Forward = True       .ClearFormatting       .MatchWholeWord = True       .MatchCase = False       .Wrap = wdFindContinue       'lmojiを検索       If .Execute(FindText:=lmoji, Forward:=True, Format:=True) = True Then         '行、頁位置を取得         aa = Selection.Information(wdFirstCharacterLineNumber)         pp = Selection.Information(wdActiveEndPageNumber)         '末尾までの対象文字を10文字分取得可能か判定         Selection.EndKey Unit:=wdLine, Extend:=wdExtend         If Len(Selection) - 9 < 10 Then           flag = False         Else           '文字列の取得           Selection.MoveLeft Unit:=wdCharacter, Count:=1           Selection.MoveRight Unit:=wdCharacter, Count:=8           Selection.MoveRight Unit:=wdCharacter, Count:=10, Extend:=wdExtend           lVal = Selection           flag = True         End If       End If       '開始位置ならループ終了       If a = aa And p = pp Then Exit Do       '末尾まで10文字確保できない場合は処理をスキップ       If flag Then         '文字を取得して判定         For i = 1 To Len(lVal)           cVal = Mid(lVal, i, 1)           If IsNumeric(cVal) Then             '数値の場合             flag = True           Else             '文字の場合             If cVal = ":" Or cVal = "|" Or cVal = " " Then               flag = True             Else               flag = False             End If           End If           If flag = False Then Exit For         Next i         '対象文字の削除         If flag Then           Selection.Delete Unit:=wdCharacter           flag = False         End If       End If       '初期位置を記録       If a = "" Then a = aa: p = pp       '検索位置をシフト       .Parent.Move Count:=1     End With     DoEvents   Loop   Application.ScreenUpdating = True   Selection.Find.ClearFormatting End Sub

mj888
質問者

お礼

早速の修正版をありがとうございます。 使ってみました。完璧です。助かります~感謝申し上げます。 ご呈示頂いた、VBAは、私にはまだ解読できませんが、勉強して理解していきたいと思います。 本当にありがとうございました。m(_ _)m

その他の回答 (2)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

私もVBAはエクセル程度しか扱っていないので、 Word VBAは素人ですが作成してみました。 カーソル位置をMoveRightやMoveDownで確実に 各先頭行からn文字と指定することも出来ますが 複数行にわたる文面に対する処理を不要にする事と、 処理速度を考慮して"["を検索した位置を基準としています。 ■判定方法について [8:51:40 | 8:52:14] qqe-CF: That is the school where Q-rex teaches. コード簡略化のため、Likeにより上記の場合の判定部分『 | 8:52:14』が『 |*:*:*』に一致するかで判定しています。 ご質問内容のように文字か、数字かで判断する場合は以下の箇所を追加・差替えてください。 '変数を宣言【同コメント内の最後に追加】 dim i As Integer '文字列の取得 【同コメント内を全差替え】 Selection.MoveRight Unit:=wdCharacter, Count:=8 Selection.MoveRight Unit:=wdCharacter, Count:=10, Extend:=wdExtend lVal = Selection '文字を取得して判定 【同コメント内を全差替え】 For i = 1 To Len(lVal)   cVal = Mid(lVal, i, 1)   If VarType(cVal) = vbDouble Then     '数値の場合     flag = True   Else     '文字の場合     If cVal = ":" Or cVal = "|" Or cVal = " " Then flag = True   End If   If flag = False Then Exit For Next i '対象文字の削除【同コメント内を全差替え】 If flag Then   Selection.Delete Unit:=wdCharacter   flag = False End If ■VBAコード Sub sample() '変数を宣言 Dim lmoji As String, lVal As String, cVal As String Dim aa As String, pp As String, a As String, p As String Dim flag As Boolean   '検索文字を指定   lmoji = "["   'カーソルを先頭へ   Selection.HomeKey Unit:=wdStory   Application.ScreenUpdating = False   'メイン処理   Do     '検索条件を設定     With Selection.Find       .Forward = True       .ClearFormatting       .MatchWholeWord = True       .MatchCase = False       .Wrap = wdFindContinue       'lmojiを検索       If .Execute(FindText:=lmoji, Forward:=True, Format:=True) = True Then         '行、頁位置を取得         aa = Selection.Information(wdFirstCharacterLineNumber)         pp = Selection.Information(wdActiveEndPageNumber)         '文字列の取得         Selection.EndKey Unit:=wdLine, Extend:=wdExtend         lVal = Selection.Text       End If       '開始位置ならループ終了       If a = aa And p = pp Then Exit Do       '文字を取得して判定       If Mid(lVal, 9, 10) Like " |*:*:*" Then flag = True       '対象文字の削除       If flag Then         Selection = Replace(lVal, Mid(lVal, 9, 10), "")         flag = False       End If       '初期位置を記録       If a = "" Then a = aa: p = pp       '検索位置をシフト       .Parent.Move Count:=2     End With     DoEvents   Loop   Application.ScreenUpdating = True   Selection.Find.ClearFormatting End Sub

mj888
質問者

お礼

eden3616さん ご丁寧に回答いただきましてありがとうございます。感謝申し上げます。 早速、ご呈示のVBAコードを「文字か、数字かで判断する場合」で、該当箇所を追加・差替えてテストしてみました。結果が以下の通りです。 _____________________________________ 処理対象文の<処理前> [8:31:32 | 8:31:59を編集しました] qqe-CF: What do you think . . . [8:31:25 | 8:31:27を編集しました] qqe-CF: I recommend you . . [8:31:25 | 8:31:27を編集しました] qqe-CF: I recommend you . . [8:31:25を編集しました] qqe-CF: I recommend you . . [8:31:26 | 8:31:59を編集しました] qqe-CF: What do you think . . . [8:42:27 qqe-CF: What do you think of the book? [8:31:28 | 8:31:27を編集しました] qqe-CF: I recommend you . . [8:31:32を編集しました] qqe-CF: What do you think . . . [8:42:33qqe-CF: What do you think of the book? [8:33:33を編集しました] [8:31:34 | 8:31:27を編集しました] qqe-CF: I recommend you . . [8:31:34編集しました] qqe-CF: What do you think . . . [8:42:34qqe-CF: What do you think of the book? [8:33:35編集しました] [8:31:16 | 8:31:27を編集しました] qqe-CF: I recommend you . . [8:31:32を編集しました] qqe-CF: What do you think . . . [8:33:17 | 8:33:51を編集しました] <処理後>   ↓↓↓ [8:31:32を編集しました] qqe-CF: What do you think . . . [8:31:25を編集しました] qqe-CF: I recommend you . . [8:31:25を編集しました] qqe-CF: I recommend you . . [8:31:25を編集しました] qqe-CF: I recommend you . . [8:31:26を編集しました] qqe-CF: What do you think . . . [8:42:27hat do you think of the book? [8:31:28を編集しました] qqe-CF: I recommend you . . [8:31:32を編集しました] qqe-CF: What do you think . . . [8:42:33qqe-CF: What do you think of the book? [8:33:33を編集しました] [8:31:34 | 8:31:27を編集しました] qqe-CF: I recommend you . . [8:31:34編集しました] qqe-CF: What do you think . . . [8:42:34qqe-CF: What do you think of the book? [8:33:35編集しました] [8:31:16 | 8:31:27を編集しました] qqe-CF: I recommend you . . [8:31:32を編集しました] qqe-CF: What do you think . . . [8:33:17を編集しました] ________________________________________ ※4行目に空白行が入っています。 1行目~8行目までは、対象範囲の10文字数だけ削除されていますが7行目だけは文字なのに10文字が削除されています。そこから以降の行は処理せずに最終行に飛んで削除処理して終わっています。 結果の問題点 1.7行目の文字を削除してしまった。 2.9行目から最終行の間の削除処理が行われていない。 以上の問題点が解決できればと願っております。お手数を掛けますが、また、お願いできればとおもいます。 宜しくお願いします。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

VBAでの回答ではありませんが・・・ もし2個目の時間部分を削除したいだけなら正規表現置換でいいのでは? http://utils.ipentec.com/WebTextUtility/ReplaceText/ 上記サイトの入力に対象の文章をコピーし、 置換パターン: (\[[\d\:]+) \| [\d\:\] ]+(\w.+) 置換文字列: $1] $2 を入力して置換実行をクリックしてください。

mj888
質問者

お礼

ご親切に回答していただきまして、本当にありがとうございました。感謝申し上げます。m(_ _)m

mj888
質問者

補足

回答ありがとうございます。折角の回答していただきましたが、対象文書が大きいのと他の文書などにも応用させたい為にも、やはりVBAプログラムでお願いしたいと思います。

関連するQ&A

  • WORDでの文字の合わせ方

    WORD2010で報告書を作成しています。 数字等を打ち込むと(半角英文字、半角数字、全角ひらがな)、行ごとにずれてしまいます。 (例) お茶750ML   1個の値段   \120.- APPLE1000ML 1個の値段    \99.- このように 1個の値段及び\**.- の文字を合わせたいのに合わないのです。 何かやり方があるのでしょうか? 初心者なのでお助け下さい。

  • VBAで左端文字を削除

    エクセル2002使用です。 A列に文字列が1~1000行まで入力されています。 文字列の左端に記号(1文字)が入力されているので削除したいのですが、 (○株式会社あいうえお)←○を削除したい VBAで下記のように記述したのですが、 実行時エラー424となります。 Sub 削除()  Dim i As Integer  For i = 1 To 1000 '行番号を変更  Left(Cells(i, 1).Value, 1).Delete '列番号を変更  Next End Sub よろしくお願いします。

  • WORD2007です。

    WORD2007です。 行の途中でスペースを数文字分打ち、その後(111.1)と全角で打ち、括弧を含めた数字部分を均等割付7文字に設定します。 その後括弧内の数字を修正しようとすると括弧も含めた数字が全て半角に強制修正されてしまうのですがなぜなんでしょうか? 全て削除して頭から全角で打ち直すと半角にはならずにすむのですが、途中の数字一文字だけ直そうとすると半角を強制されてしまいます。 ご教授願います。

  • word の文字が細かく揃ってくれません

    現在、word2003を使用して、横書きの文章(明朝体)を作っています。 行頭の左端をきちんと揃えても、行の途中になると、その上下行の文字と細かくずれて、文字が縦方向に揃ってくれません。 半角スペースを入れたりしても、思うように位置が決まってくれません。 何とか、原稿用紙のマスに埋め込んだように、縦方向から見ても、きちんと揃えたいのですが、どこを設定すれば宜しいでしょうか。 急いで解決する必要がありますので、よろしくお願いいたします。

  • Excel VBAで、特定半角文字のみ全角文字に変換したい。

    Excel VBA で、 A列に半角、全角が混在した文字列及び数字が入っています。 ファイル名に出来ない半角文字 \ / : * ? " < > | だけを全角文字にするには、 どのようなコードを書けば良いのか、宜しくお願いします。

  • 特定の文字を除くVBA

    特定の文字を除くためのVBAについて質問させてください。 あるマクロを実行したときに、インプットボックスを表示させ、 特定の文字や数字を入力します。そして、H列に入力した文字や数字を含まない行にある処理を行いたいと思います。 以下のようにVBAを入力してみたのですが、インプットボックスに入力した文字をうまく除外してくれません。一体どういった書き方が正しいのでしょうか~?! ご教授いただけるととても助かります! よろしくお願いいたします。 message = InputBox("文字を入力して下さい") If Not Cells(行, H).Value Like "*" & message & "*" Then 処理

  • Word 2007 文字数の設定。

    数字が入った論文を執筆するときの文字数の設定。 一行30字と設定をしても、普通の文字(漢字、ひらがな、カタカナ)だけで入力されている行はしっかり30字になっています。 だけど、数字や記号がはいってますと、30字を超えてしまいます。 数字や記号はできるだけ半角で入力したいと思っています。 全角にしたとしても、半角よりかは文字数が減りますが、 30字を超えてしまいます。 ぴったりどの行も30字にする方法はありますか。 また、統計学や心理学、理系の方は論文に数字がでてくることが多いと思いますが、 そのときどのように文字数設定されていましたか。 教えて下さい。 キーワード Word 2007 卒業論文

  • Word 均等割付について

    3文字を4文字の幅で均等割付にしたところ、左端がキレイにそろわなくて困っています。 5行目まではそろっているのですが、次は半角程度右にズレてしまいます。 左端から一文字分スペースを空けて書いています。 例えば  123  123   123 のようにずれてしまいます。 修正の仕方を教えてください。

  • 途中にある一文字を削除したい

    英字と数字のセルがあります。 そこから特定の英字をひとつだけ削除したいのです。 例 ABCD12345 → ABC12345 AMDD29384 → AMD29384 ERKGD45096E → ERKG45096E となるようにです。Dの文字をひとつ削除します。 数字の並びも変則です。英字はだいたい3~6文字ぐらい、数字は6桁ぐらいで、数字の後に英字が1文字ついてるものもあります。 1000行ぐらいあります。 簡単に変換できる方法がありましたら教えてください。 よろしくお願いします。 自分が考えたのは、LFET関数で英字の文字を表示し、LEN関数でその文字数を数え(これは行を分別しやすいように)、REPLACE関数で何文字目を指定し、その指定文字(この場合はD)を空白に変換し、置換で空白をなしにするものです。

  • 英語問題

    1:That was the year () l was born. (1)where (2)into which (3)in which (4)at which 2:This must be the novel Mr.Matsuyama () his lecture. (1)had referred in (2)had referred to (3)referred to in (4)was referred to 3:This is a photo of the house () before we moved to Osaka. (1)where we lived in (2)we lived (3)with which we lived (4)we lived in 4:This is the village () our teacher was born. (1)which (2)that (3)in that (4)where 5:This is the place () l have long wanted to visit. (1)where (2)which (3)what (4)in which 解答と和訳お願いします

専門家に質問してみよう