MS-Wordの文章を検索して行頭に一致した文字がある段落を削除するマクロを作りたいと思いチャレンジしています。
たとえば,文章を頭から順に検索して,行頭にある文字が検索文字と一致した場合,その段落を削除して,次の行を検索し続け,文書が終わったら終了するようなマクロです。
小生,WordVBAを2日ほど前から学び始めたばかりで,ネットや参考書を探しまして,"@"マークが行頭にある段落を削除するというサンプルを作るところまでは何とかできたのですが,これを文章全体に一括して実行できるマクロにするにはどうすればよいかに手こずっています。
このマクロがあると仕事の効率がぐんとアップしますので,何とかしたいと思っています。
是非ご教いただければ大変ありがたく思います。
<サンプル>
Sub test_DeleteParagraph()
Selection.HomeKey Unit:=wdStory, Extend:=wdMove
With Selection.Find
.Forward = True
.ClearFormatting
.MatchWholeWord = True
.MatchCase = False
.Wrap = wdFindContinue
If .Execute(FindText:="@", Forward:=True, Format:=True) = True Then
Selection.HomeKey Unit:=wdLine, Extend:=wdMove
Selection.MoveDown Unit:=wdParagraph, Extend:=wdExtend
lVal = Selection
End If
Selection.Delete
End With
Selection.Find.ClearFormatting
End Sub
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
No.1の回答者です。
No.2の回答でスキルがないので分からないと書きましたが、スキル向上
のために調べてみるとWordマクロでもLeft関数が使えるようですね。
これを利用して、先頭の文字列が2文字以上でも検索できるものを用意しました。
Sub test6_DeleteParagraph()
' test5_の改良版
Dim para As Paragraph
Dim Npara As Variant
Dim LeftString As String
For Each para In ActiveDocument.Paragraphs
' 指定文字があったら段落として選択
With para
' 左から2文字目までの文字列を指定
LeftString = Left(para, 2)
If LeftString = "|v" Then
.Range.Select
Npara = para
' 選択範囲を次の段落まで拡張
With Npara
.Expand Unit:=wdParagraph
.MoveEnd Unit:=wdParagraph, Count:=1
.Delete
End With
End If
End With
Next
End Sub
マクロの中の LeftString = Left(para, 2) で段落内の左から2文字
を取得して、指定文字列と取得した文字列が一致した段落と次の段落を
削除するようにしたものです。
たぶん、この回答で希望していることができると思います。
この質問に回答することで、少しですがスキルが向上したので、私個人として
勉強になりました。
No.2
- 回答日時:
No.1の回答者です。
test2_DeleteParagraphのマクロでは、検索した文字列のある段落範囲
に拡張されませんでしたね。
Selection.Findだけの場合は、前のままのRange.Expandでの拡張範囲の
設定ができないためでしたね。
前のものを修正してもよいのですが、面倒なのでRange.Expandを使える
方法を新たに作り直しました。
Sub test4_DeleteParagraph()
' test2_の改良版
Dim rng As Range
Set rng = ActiveDocument.Range(0, 0)
' 検索文字を指定
With rng.Find
.Text = "@"
End With
' 検索結果がTrueなら、次の段落まで拡張して削除を繰り返し
With rng
Do While .Find.Execute = True
.Expand Unit:=wdParagraph
.MoveEnd Unit:=wdParagraph, Count:=1
.Delete
Loop
End With
End Sub
前の回答でも書きましたが、上記マクロは段落内に特定の文字があった
場合に、次の段落まで拡張して削除をするものです。検索する文字列が
段落内のどこにあっても、段落ごと削除されます。
段落先頭の文字が条件なら、以下の修正マクロでも可能です。
Sub test5_DeleteParagraph()
' test3_の改良版
Dim para As Paragraph
Dim Npara As Variant
For Each para In ActiveDocument.Paragraphs
' 指定文字があったら段落として選択
With para
If .Range.Characters.First = "@" Then
.Range.Select
Npara = para
' 選択範囲を次の段落まで拡張
With Npara
.Expand Unit:=wdParagraph
.MoveEnd Unit:=wdParagraph, Count:=1
.Delete
End With
End If
End With
Next
End Sub
このマクロの場合、先頭の1文字のみ対象にしていて、先頭以外に指定の
文字があっても削除されません。
それと、文字数は2文字以上を対象にはできません。
先頭の2文字以上を指定する方法は、私のスキルでは分かりません。
No.1
- 回答日時:
以下のように修正すれば可能だと思います。
Sub test2_DeleteParagraph()
Selection.HomeKey Unit:=wdStory, Extend:=wdMove
Selection.Find.ClearFormatting
With Selection.Find
' Selection.Findを使う場合は条件を入れたほうが良い
.Format = True
.Text = "@"
.Forward = True
.ClearFormatting
.MatchWholeWord = True
.MatchCase = False
.Wrap = wdFindContinue
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = False
' 検索結果がTreeなら、段落まで拡張して削除を繰り返し
With Selection
Do While .Find.Execute = True
.Range.Expand Unit:=wdParagraph
.Delete
Loop
End With
End With
End Sub
上記マクロは、段落内に特定の文字があった場合に、段落へと拡張して
削除をするものですが、段落先頭の文字が条件なら、以下のマクロでも
可能です。
Sub test3_DeleteParagraph()
Dim para As Paragraph
For Each para In ActiveDocument.Paragraphs
With para
If .Range.Characters.First = "@" Then
.Range.Delete
End If
End With
Next
End Sub
この回答への補足
あれからいろいろ試してみました。
行頭の2文字を検索する件については,ワードの置換機能を使って事前に「@」に置換しておくことで対応しようと思います。
その後,このマクロを実行することで,行頭に「@」がある段落がまず削除され,その次の段落も削除されるようになりました。
親切にアドバイスいただきありがとうございました。
<サンプル>
Sub DeleteParagraph()
Selection.HomeKey Unit:=wdStory, Extend:=wdMove
Selection.Find.ClearFormatting
With Selection.Find
' Selection.Findを使う場合は条件を入れたほうが良い
.Format = True
.Text = "@"
.Forward = True
.ClearFormatting
.MatchWholeWord = True
.MatchCase = False
.Wrap = wdFindContinue
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = False
' 検索結果がTreeなら、段落まで拡張して削除を繰り返し
With Selection
Do While .Find.Execute = True
Selection.HomeKey Unit:=wdLine, Extend:=wdMove
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.Delete
Selection.HomeKey Unit:=wdLine, Extend:=wdMove
Selection.MoveDown Unit:=wdParagraph, Extend:=wdExtend
Selection.Delete
Loop
End With
End With
End Sub
早速のアドバイスをありがとうございました。
ご教示いただいたスクリプトで試してみました。
test2_DeleteParagraphでは,"@"は削除されたのですが,そのあとのテキストは残ってしまいました。
段落の削除が上手くいかないようです。
test3_DeleteParagraphでは,"@"が行頭にある段落が見事に削除されました。
これらのスクリプトを手本にして,行頭に"|v"のある段落を削除し,さらにその次の段落も削除するマクロを作りたいと思っています。
いろいろと試していますが,なかなかうまくいきません。
test2_DeleteParagraphでは,どうしても次の段落が削除できません。
test3_DeleteParagraphでは,行頭の検索が2文字になってしまいますので,このままではできないため試行錯誤していおります。
もしお時間がありましたら,アドバイスをいただけると大変ありがたいです。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) Excelのマクロコードについて教えてください 1 2022/03/27 12:02
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
「平成」を感じるもの
「昭和レトロ」に続いて「平成レトロ」なる言葉が流行しています。 皆さんはどのようなモノ・コトに「平成」を感じますか?
-
とっておきの手土産を教えて
お呼ばれの時や、ちょっとした頂き物のお礼にと何かと必要なのに 自分のセレクトだとついマンネリ化してしまう手土産。 ¥5,000以内で手土産を用意するとしたらあなたは何を用意しますか??
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
タイムマシーンがあったら、過去と未来どちらに行く?
20XX年、ついにタイムマシーンが開発されました。 あなたは過去に行く? それとも未来? タイムマシーンにのって、どこに行って、何をしたいか教えてください!
-
WordVBA 行の削除
その他(Microsoft Office)
-
ワードのマクロで段落番号(文字も含む)取得ってできますか
Word(ワード)
-
指定した文字があった場合、その行を削除するマクロが欲しいです
Excel(エクセル)
-
-
4
【VBA】エクセルの指定セルの値を、Wordの指定場所に貼る方法
Excel(エクセル)
-
5
MS Office Word のマクロで行列の現在位置を取得したいのですが?
Word(ワード)
-
6
Word VBA 表中の空白行を削除する方法
Word(ワード)
-
7
コンボボックスにリストが表示されません・・・
Excel(エクセル)
-
8
Word のVBAについて初心者なのですが、質問があります。
Word(ワード)
-
9
Word VBA 表中の空白行を削除する方法
Word(ワード)
-
10
WORDマクロで特定文字から別文字までを範囲選択したい
Word(ワード)
-
11
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
12
wordでの指定オブジェクトの削除
Word(ワード)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のPCだけ動作しないVBAマク...
-
Excel マクロ VBA プロシー...
-
Excel・Word リサーチ機能を無...
-
TERA TERMを隠す方法
-
ExcelのVBA。public変数の値が...
-
一つのTeratermのマクロで複数...
-
メッセージボックスのOKボタ...
-
エクセルで特定の列が0表示の場...
-
Excel マクロでShearePoint先の...
-
特定文字のある行の前に空白行...
-
マクロで空白セルを詰めて別シ...
-
ExcelVBAでPDFを閉じるソース
-
マクロ実行時、ユーザーフォー...
-
エクセルで縦に並んだデータを...
-
エクセルで別のセルにあるふり...
-
#defineの定数を文字列として読...
-
複数ページあるPDFファイル内の...
-
VBA アドインについて お詳しい...
-
Accessのテーブル、クエリをCSV...
-
ダブルクリックで貼り付けた画...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定のPCだけ動作しないVBAマク...
-
Excel・Word リサーチ機能を無...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
エクセルに張り付けた写真のフ...
-
ExcelのVBA。public変数の値が...
-
Excel マクロでShearePoint先の...
-
TERA TERMを隠す方法
-
ExcelVBAでPDFを閉じるソース
-
特定文字のある行の前に空白行...
-
Excel VBAからAccessマクロを実...
-
wordを起動した際に特定のペー...
-
マクロ実行時、ユーザーフォー...
-
エクセルで別のセルにあるふり...
-
マクロで空白セルを詰めて別シ...
-
ソース内の行末に\\
-
Excel_マクロ_現在開いているシ...
-
ダブルクリックで貼り付けた画...
おすすめ情報