• 締切済み

macroコードを短縮できるでしょうか。

Wendy02の回答

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

こんにちは。 基本的には、私は、もうここのカテゴリでは書く意欲自体を失ってしまったのですが、気になった個々の方に関しては、ある程度まで、サポートはさせていただくことにしています。 もし、記録マクロで出来ているのでしたら、そのままお使いになればよいと思います。あえて、コードをまとめようと欲をかいても、こちらの書いたコードが、出来ない-->分からない-->そのまま ということでは、まったく意味がありません。 >2000文字を超えるので、途中大幅にカットしました。 ExcelでもWordでも、VBEditor 内のひとつのプロシージャとしては、一般的に、100行程度までです。 ですから、それ以上の行数では、基本的なマクロの形態を有していない可能性が強いです。その場合は、プロシージャを分散させて、Call マクロ名、とすればよいです。 質問のご要望は、同じような内容のマクロを一つにしてほしいということだと思いますが、残念ながら、ご質問の要点が良く分かりません。分からない部分は、コードを読めということだと思います。それでは、少し乱暴です。それに、本来、マクロの基礎的なものですから、それをする以前の部分が、ネックとなる可能性があるかもしれません。 >削除しては具合が悪い数字については、明朝で標準に戻すようにしてから、赤字で太字の数字を削除しました。 でも、コードを見る限りは、そうはなっていないようです。規定の太字で数字が含まれた文字を削除する、ということでしょうか。 サンプルを示しておきます。「太字」になっている、リストの文字を削除します。 削除したりする内容や仕様が変わるなら、内容を変えて、もう一つ、ループを作ればよいです。 元のコードでは、なぜ、Private ステートメントなど付けたのでしょうか、そういう部分がわかりません。 '------------------------------------------- Sub 符号削除2() Dim blFound As Boolean Dim arData1 As Variant Dim v As Variant '一覧のリストを以下に、「,(コンマ)」で切って入れます。 Const fDATA1 As String = "第[0-9],又は[2-9],又は1[0-9],乃至20,[0-9]" arData1 = Split(fDATA1, ",") blFound = True For Each v In arData1 Do   With Selection.Range.Find     .ClearFormatting     .Font.Bold = True     .Text = v     .Replacement.Text = ""     .Format = True     .Wrap = wdFindContinue     .MatchCase = False     .MatchWholeWord = False     .MatchByte = False     .MatchAllWordForms = False     .MatchSoundsLike = False     .MatchFuzzy = False     .MatchWildcards = True          blFound = .Execute(Replace:=wdReplaceAll)   End With Loop While blFound = True Next v End Sub '----------------------------

azuma3chom
質問者

お礼

>基本的には、私は、もうここのカテゴリでは書く意欲自体を失ってしまったのですが、気になった個々の方に関しては、ある程度まで、サポートはさせていただくことにしています。 こんにちは、Wendy02さん、ちょっとさみしいですね。 >もし、記録マクロで出来ているのでしたら、そのままお使いになればよいと思います。あえて、コードをまとめようと欲をかいても、こちらの書いたコードが、出来ない-->分からない-->そのまま ということでは、まったく意味がありません。 今度のマクロの狙いは、用語+符号の文書で符号を消すことです。 特許明細書は、実施形態の記載欄より上側の部分は符号を入れないことになっています。符号を入れると、裁判で争いになったときに、狭く解釈される恐れがあるからです。ですが、明細書作成中は、符号がないことには、なかなか頭の中に入りません。それで、全文を通じて符号を入れて作成します。クライアントへ送るときに、実施形態の記載欄より上側の部分は符号を全部取り除きます。権利範囲のボリュームが多いときは、符号が半端ではないほど多く入っています。消し忘れも起きることがあります。3,4年経って、出願について審査が行われ、拒絶理由通知がきたときには、自分が書いた文章でもすっかり忘れていて、権利範囲の用語に符号をつけることから、解釈し反論します。ですから、符号を消さない文書もストックしておけば、後々楽になりますが、出願用には符号を外す必要があります。それで、今度のマクロを考えました。マクロ作成は、検索置換のウインドウで部分的の操作してコードを拾って積み重ね、実行を繰り返しましたので、問題なく動きます。ですが、同じ処理を延々と書くのは、どうなのか?、と疑問に思った次第です。それに、権利範囲を30以上書く場合もある(私は20位までです)のでまとめられたらいいと考えていました。1つの出願が1000頁というのも過去にありました。 Wendy02さんの示されたサンプルコードに従って、マクロ記録したコードをいじってみます。

関連するQ&A

  • 特定の色のマーキングだけを解除するマクロ

    Wordのマクロについての質問です 複数の色でマーキングしている文書があり、 特定の色のマーキングだけを解除するマクロを 作成していますが、マーキングの色の指定の仕方がわかりません。 マーキングの色の指定はどのよう(どこ)にすれば、よいのですか。 Sub マーキングなし() ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting Selection.Find.Replacement.Highlight = False With Selection.Find .ClearFormatting .Highlight = True .Text = "" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = True End With Selection.Find.Execute Replace:=wdReplaceAll end sub

  • ワードで選択範囲だけの改行を削除するマクロ

    こんにちは いつもお世話になっています ワード2010で、選択範囲だけの部分の改行を削除するマクロを記録マクロで作ったのですが、選択部以外もすべて改行してしまいます。どこがいけないのでしょうか。あるいは、操作の仕方でしょうか。以前は使えていたと思うのですが、仕様が変わったのでしょうか。 任意の範囲を選択しておいて、記録を開始しました。 よろしくお願いします。 Sub Macro1() ' ' Macro1 Macro ' ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "^p" .Replacement.Text = "" .Forward = True .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll End Sub ネット上で見つけた以下のマクロでもすべての改行が削除されます。 http://okwave.jp/qa/q960285.html Sub Macro14() Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "^p" .Replacement.Text = " " End With Selection.Find.Execute Replace:=wdReplaceAll End Sub

  • Wordマクロ

    Wordでワイルドカードを使った置換マクロを作ったのですが、 「MatchWildcardsとMatchSoundsLike、MatchAllWordForms、MatchFuzzyは、同時にTrueに設定することはできません。」 というエラーが出てしまいます。 MatchSoundsLike、MatchAllWordForms、MatchFuzzyは、 ソースに書いてないしTrueにもしていません。 どこが悪いのでしょうか? 以下がソースファイルです、よろしくお願いいたします。 Sub substitute() ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "[!a-f]{1,}" .Replacement.Text = "@" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll End Sub

  • Word2010特定の名前を置き換えるマクロ

    例えば、Wordの文章で「田中」とあるものを「山田」に変えたい場合は、置き換えの機能を使ってマクロの記録ができると思います。 しかし、こうするとテキストボックスやヘッダフッタに記載された文字は変更できないように思います。 どうすれば、これらの文字も含めて置換の対象とすることができるか教えてください。 Sub Macro() Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "山田" .Replacement.Text = "田中" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = True End With Selection.Find.Execute Replace:=wdReplaceAll End Sub

  • word2007 マクロ

    下記マクロは蛍光ペン部分を消して、その文字数分にアンダーラインを引くマクロになります これを改造して、赤文字を消して、その文字数分を空欄にしたいのです。 ですが、wdColorRedの入れ方が分かりません。ご教授お願いします。 Sub Problem() '蛍光ペン部分を消して、アンダーラインを引く Selection.Find.ClearFormatting Selection.Find.Highlight = True Selection.Find.Replacement.ClearFormatting Selection.Find.Replacement.Highlight = False With Selection.Find.Replacement.Font .Underline = wdUnderlineSingle .StrikeThrough = False .DoubleStrikeThrough = False .Outline = False .Shadow = False .Hidden = False .AllCaps = False .Superscript = False .Subscript = False End With With Selection.Find .Text = "*" .Replacement.Text = " ^z" .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll End Sub

  • MicrosoftWordのページ指定置換マクロ

    お世話になります。 MicrosoftWordの文章の中の『SYSTEMS』と単語を XXXXXXXに置換するマクロを作ってみましたが これですとWordの文章ファイルの 全てページの『SYSTEMS』とゆう単語を置換してしまいます。 Wordの文章ファイルの1ページ目だけの全ての『SYSTEMS』 とゆう単語を置換するマクロはどのようにすればよいでしょうか? Sub Macro2() ' ' Macro2 Macro ' ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "SYSTEMS" .Replacement.Text = "XXXXXXX" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = True End With Selection.Find.Execute Replace:=wdReplaceAll End Sub

  • 以下のようなマクロを作成しましたが、文章の最後まで連続置換をしたい場合

    以下のようなマクロを作成しましたが、文章の最後まで連続置換をしたい場合はどうすればよいのでしょうか。 ご教示をお願い致します。 ************************ Selection.Find.ClearFormatting With Selection.Find .Text = "<G>*<M>" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True End With Selection.Find.Execute Selection.Font.Name = "MS ゴシック" Selection.Find.ClearFormatting With Selection.Find .Text = "<G>*<M>" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True End With End Sub ************************

  • ワードでマクロがうまくいきません。

    よろしくお願いします。 マクロの知識はほとんどないのですが、 「マクロの記録」の機能を使い、ワードで 「スペースを探し出し、そのスペースにアンダーラインを引く。」 ために、 -------------------- 編集ー置換ー 検索する文字列にスペースをタイプ、 置換後の文字列にスペースをタイプ、 オプションの書式で、フォント、下線、一重下線 すべて置換 -------------------- マクロの記録を選択した後、上のように作業しました。 そしてマクロの記録をとめました。 マクロの記録中の操作では、思い通りに置換されるのですが、 次にそのマクロを作動させると、なにもおこりません。 なにか変な操作をしたのか、と五度くらい試したのですが、 やはり動きません。 中身は、↓のようでした。 -------------------- Sub Macro2() ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = " " .Replacement.Text = " " .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = True End With Selection.Find.Execute Replace:=wdReplaceAll End Sub -------------------- どうしてうまく動かないのでしょうか。 教えていただけるとありがたいです。よろしくお願いします。

  • wordで選択した部分の前後に文字列を挿入するマクロを作成したいと思っ

    wordで選択した部分の前後に文字列を挿入するマクロを作成したいと思っています。 Word文章中から二重下線を検索しマーカーを付けています。 その検索したマーカーが付いている前に例えば"あいう"後に"ABC"と入れる場合どうすれば良いのでしょうか? Selection.InsertBefore Selection.InsertAfter 等を使って入れられる事はわかりましたがうまく入れる事が出来ません。 どなたかご教授頂けると幸いです。 他のやり方もあれば是非宜しくお願い致します。 Sub UnderlineDouble() ' ' 検索条件で二重下線、置換条件で蛍光ペン ' With Selection.Find .ClearFormatting .Replacement.ClearFormatting '検索で二重下線 .Font.Underline = wdUnderlineDouble .Text = "" '置換で蛍光ペン .Replacement.Highlight = True .Replacement.Text = "^&" 'その他の条件 .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .CorrectHangulEndings = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll MsgBox "完了" End Sub

  • myText = Selection.Range.Textについて

    任意の文字列を選択することを含むワードのマクロでは、検索置換ウインドウを使うと、以後、正常な置換が行われないようなのですが、どうしたら、正しい置換が行われるように確保できますでしょうか。どなたか、お教え願います。例えば、以下のコードです。 Dim myText As String myText = Selection.Range.Text With Selection.Find With .Replacement.Font .Name = "明朝" .Color = 255 .Bold = True End With .ClearFormatting .Text = myText .Format = True .Forward = True .Wrap = wdFindAsk '.Wrap = wdFindContinue .MatchFuzzy = False Selection.Find.Execute Replace:=wdReplaceAll End With ある文字列を選んで実行すると、赤字で太字になります。別の文字列をを選んで実行すると、同様に赤字で太字になります。ところが、検索置換ウインドウを使ってしまうと、その後は、検索置換ウインドウの入力状態に支配されてしまいます。 このようなことは、他のマクロでも確認しています。例えば次のマクロもそうです。 Dim myText As String myText = Selection.Range.Text Options.DefaultHighlightColorIndex = wdBrightGreen With Selection.Find With .Replacement .ClearFormatting .Highlight = True End With End With With Selection.Find With .Replacement .ClearFormatting .Highlight = True End With .ClearFormatting .Text = myText .Format = True .Forward = True .Wrap = wdFindAsk '.Wrap = wdFindContinue '.MatchFuzzy = True Selection.Find.Execute Replace:=wdReplaceAll End With myText = Selection.Range.Textはだめなようです。 通常の検索置換は、検索置換ウインドウが作動するようです。検索置換ウインドウが作動しない検索置換のコードがあれば教えてください。 For~Nextによる一文字ずつの繰り返し処理では時間がかかるので、一ワードずつFor Eachの繰り返し処理で検索置換ウインドウが作動しない検索置換のコードがあれば教えていただけると幸甚です。