【Word VBA】字下げインデントを全角スペースやタブに変換するWordマクロ

以下の記事のアップデート版です。
【コード】字下げインデントを全角スペースに変換するWordマクロ 
【コード】字下げインデントを全角スペースに変換するWordマクロ(文書全体編) 

以前紹介した上記のWordマクロは、和文において入力オートフォーマットにより勝手にインデントが設定されてしまった場合にインデントを解除して全角スペースを挿入するためのマクロでした。

今回は、お客様からの要望で英文のタブ挿入にも対応するマクロを作成してみました。そういえば、英文でも同じようなニーズはありそうですね。

このマクロでは、英文においてインデントが設定されている箇所をタブに変換します。以前のように全角スペースも挿入できるようにしています。

このマクロでできること

文書全体のメイン文書(本文の入力箇所)を処理対象にしています。

インデントにより段落先頭のスペースが挿入されている箇所をタブ(または全角スペース)に変更します。

挿入したタブ(または全角スペース)箇所を明るい緑の蛍光ペンで着色します。

(実行前)

赤矢印で示した箇所はスペースが空いていますが、タブ記号が見えません。そうです。この部分には左インデントが設定されているのです。

インデント

(実行後)

マクロを実行するとダイアログボックスが表示されます。インデントを全角スペースに変換する場合には1を、タブに変換する場合には2を入力して[OK]ボタンをクリックします。

今回の例では、2を入力します。

インデント

タブが設定されて、明るい緑色の蛍光ペンで着色されました。文書全体で処理された箇所がわかるので、蛍光ペンを頼りにして見直しができます。

インデント

マクロの解説

前回の記事(【コード】字下げインデントを全角スペースに変換するWordマクロ(文書全体編))のコードに基づいて作りました。

前回からの変更点は、蛍光ペンの着色方法です。

前回は、インデント箇所を特定して全角スペースを挿入した後に、挿入した全角スペースを特定するためにわざわ Rangeオブジェクトを作り範囲指定していました。

Set myRange = myDoc.Range(.Range.Start, .Range.Start + 1)
myRange.HighlightColorIndex = wdBrightGreen

しかし、実際にはこのようなことは必要なくて、選択範囲の1文字目を指定する方法はあるのです。Characters.Firstプロパティです。以下のようにしています。(27行目)

.Range.Characters.First.HighlightColorIndex = wdBrightGreen

マクロ


Sub 字下げインデントを変換_文書全体()

 Dim myPara As Paragraph
 Dim myResult As String
 Dim myChar As String

 myResult = InputBox("挿入する記号を選択してください。" & vbCr & _
       "スペース:" & vbTab & "1" & vbCr & _
       "タブ:" & vbTab & "2", "インデント変換マクロ", 1)

 Select Case StrConv(myResult, vbNarrow)
  Case 1
   myChar = " "
  Case 2
   myChar = vbTab
  Case Else
   Exit Sub
 End Select

 For Each myPara In ActiveDocument.Paragraphs
  If myPara.FirstLineIndent > 0 Then
   With myPara
    .CharacterUnitFirstLineIndent = 0
    .FirstLineIndent = 0
    With .Range
     .InsertBefore Text:=myChar
     .Characters.First.HighlightColorIndex = wdBrightGreen
    End With
   End With
  End If
 Next myPara

End Sub

コメント

  1. naomi より:

    【コード】字下げインデントを全角スペースやタブに変換するWordマクロ
    便利に使わせていただいていたのですが、突然、数字を挿入する所で数字が打てなくなってしまいました。色々入れても全てアクセント記号のような「´」ものしか入らず、マクロを実行することができません。解決方法がわかるようでしたらご教授いただけると助かります。
    macOS Sierra(バージョン10.12.5)
    Word for Mac(バージョン15.39)

  2. naomi より:

    昨日、コメントをお送りしたものなのですが、色々試した結果、なぜか実行できるようになりました。数字は入らないのですが、実行できています。お騒がせしました。

    • 新田順也 より:

      naomiさん、コメントをありがとうございます。私はMacを持っていないので検証できなくてすみません。突然誤動作が起こるようになった場合、Wordの更新やMacのOSの更新などが原因になっているかもしれません。または、Normalテンプレートファイルが壊れるとマクロの誤動作の原因になります。
      いずれにしろ実行できるようになってよかったです。

  3. ひら より:

    はじめまして、
    以前から簡単なマクロのコードを探したり、使い方を調べたりして仕事で使っていたのですが、最近VBAの試験を受けたのでもっと色々な事に活用していきたいと思って調べていたらこちらのサイトに出会いました。
    こちらでは、字下げインデントを全角スペースやタブに変換するWordマクロを紹介されていますが、タブをスペースに変換することはできるのでしょうか?

    • 新田順也 より:

      ひらさん、
      ご質問は、文書中のすべての「タブ」を「全角スペース」に置換するということでよろしいでしょうか。この場合であれば、[検索と置換]ダイアログボックスでこの操作をした結果と同じですね。
      それならば、[検索と置換]ダイアログボックスの「すべて置換」をマクロの記録で確認するのはどうでしょうか?以下のようになります。タブの検索の場合、文書中のタブ記号を[検索する文字列]欄にコピペします。もしくは、特殊文字からタブを選択して”^t”としてもいいですね。

      Sub タブを全角スペースに置換()

      Selection.Find.ClearFormatting
      Selection.Find.Replacement.ClearFormatting
      With Selection.Find
      .Text = vbTab
      .Replacement.Text = “ ”
      .Forward = True
      .Wrap = wdFindAsk
      .Format = False
      .MatchCase = False
      .MatchWholeWord = False
      .MatchKashida = False
      .MatchDiacritics = False
      .MatchAlefHamza = False
      .MatchControl = False
      .MatchByte = False
      .MatchAllWordForms = False
      .MatchSoundsLike = False
      .MatchWildcards = False
      .MatchFuzzy = False
      End With
      Selection.Find.Execute Replace:=wdReplaceAll
      End Sub

  4. ひら より:

    新田さん、
    早速のご連絡ありがとうございます。

    文書中の「タブ」を「全角スペース」等に置き換えたいのですが、
    wordのタブ設定でタブ位置というのがあり、行内にあるタブの位置を細かく設定できるものだと私は認識しているのですが、
    そこに設定されているそれぞれのタブのタブ位置の文字数と
    同じ分のスペースを入れる事がvbaで可能なのか、と言う事を調べています。
    (文章だと説明しにくい点がありまして大変恐縮です)

    最近海外から来るword文書を既定のフォーマットに変更する際に、
    既に設定されているタブを全角、もしくは半角スペースに置き換える作業を行っていまして、
    今までは手作業で行っていたのですが、もしもvbaの機能で何か短縮する事が可能であればと思い最近色々と考えているのですが、
    ExcelVBAに比べてWordのVBAの参考資料が少なくて驚いています…

    そもそもWordVBAでそういった事が可能なのか、と言った点からにもなるのですが
    もしもそれに近い事が可能であれば何かご教授頂ければと思いご連絡させて頂きました。

    よろしくお願い致します。

    • 新田順也 より:

      ひらさん、
      なるほど。そのようなことを意図されていたのですね。
      タブの位置によりスペースの数を推定するのは難しいと思います。タブ位置までの文字数がダイアログに表示されることがありますが、標準フォントを使った場合の文字数であり、フォントサイズやフォントの種類を変えたときに位置がずれてしまいます。

      > 既に設定されているタブを全角、もしくは半角スペースに置き換える作業を行っていまして、

      この作業は大変だと思うのですが、別の方法で同じような結果・効果を得られるようなものはないのでしょうか。

トップへ戻る