• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:word文書の途中の文字を判別して消すVBA)

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

eden3616の回答

  • 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行目から最終行の間の削除処理が行われていない。 以上の問題点が解決できればと願っております。お手数を掛けますが、また、お願いできればとおもいます。 宜しくお願いします。

関連する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 解答と和訳お願いします