Word|A4⇔A3を1秒で切り替えるアドイン作成(マクロ知識不要)

  • マクロの知識不要で、コピペで実践できる。
  • WordでVBAを使う下準備
  • 実務的 用紙サイズのA4⇔A3を切り替えるマクロ作成して、をアドイン的に活用

この記事では、Wordの用紙サイズをA4⇔A3に瞬時に切り替えるマクロを紹介します。

一般的には、マクロやVBAというとExcelで使うものという印象が強いかと思います。

でも、実はWordでもマクロやVBAは使えますし、使いだすと非常に便利で時短になります。この記事では、コピペで使える実用的なマクロとして、用紙サイズのA4⇔A3を瞬時に切り替えるマクロを紹介します。

完成品はこのようになります。

それでは作り方とコードを紹介します。

開発タブ表示とマクロの動作確認

ある程度VBAに教養のある人には常識ですが、一応解説します。

wordの初期設定ではVBE(VisualBasicEditer)を表示するためのボタンが表示されていません。Wordの設定を変更し、ボタンを表示します。

wordの左上の「ファイル」タブ→「オプション」と押してください。下のような「Wordのオプション」が表示されてたら、「リボンのユーザー設定」→「開発」にチェック→「OK」と操作してください。

リボンに「開発」タブが表示されます。

次に、「開発」タブ→「VisualBasic」と押してください。専用のウィンドウでVBEが起動します。

「VisualBasic」

VBEが起動したら、「挿入」→「標準モジュール」と選択してください。「Normal」の配下に「Module1」が挿入されます。

次に、本当にマクロが動くか、お試しにコードを入力してみます。

「Module1」を押して、表示された右側のウィンドウに下記のコードを入力してください。入力が終了したら、VBEは×ボタンで閉じです。

Option Explicit
Sub Test()
    MsgBox ("マクロが動いた!!")
End Sub

wordの画面に戻ったら、「開発」タブ→「マクロ」→「test」と押してください。先ほど記入したマクロが実行され、小さなメッセージボックスるが表示されます。

マクロの実行」結果

これで、wordでマクロを利用する最低限の設定が完了しました。

ただしこれだけでは、マクロが「動くだけ」でなんの利便性もありません。次からが、この記事の本題である用紙サイズのA4⇔A3を瞬時に切り替えるマクロです。

完成コードコピペして利用

以下のコードが完成品のマクロです。このままコピーして、「Module1」にペーストしてください。

Option Explicit
Sub To_A3_2dan()
    'Undoのためのコード、以下の3行を入れないとこのマクロ実行後にUndoできない。
    Dim ur As Word.UndoRecord  'UndoRecordオブジェクトを定義
    Set ur = Application.UndoRecord
    ur.StartCustomRecord "My Custom Undo"
    '2段組みに
    Application.ScreenUpdating = False
    If ActiveDocument.ActiveWindow.View.SplitSpecial <> wdPaneNone Then
        ActiveDocument.ActiveWindow.Panes(2).Close
    End If
    If ActiveDocument.ActiveWindow.ActivePane.View.Type <> wdPrintView Then
        ActiveDocument.ActiveWindow.ActivePane.View.Type = wdPrintView
    End If
    
    
    With Selection.PageSetup.TextColumns
        .SetCount NumColumns:=2
        .EvenlySpaced = True
        .LineBetween = False
    End With
    '横長A3用紙のサイズに
    With Selection.PageSetup
        .Orientation = wdOrientLandscape  '印刷の横長or縦長をしていする。これを入れないと印刷がおかしくなる。
        .TopMargin = MillimetersToPoints(20)
        .BottomMargin = MillimetersToPoints(20)
        .LeftMargin = MillimetersToPoints(25)
        .RightMargin = MillimetersToPoints(25)
        .HeaderDistance = MillimetersToPoints(7)
        .FooterDistance = MillimetersToPoints(10)
        .Gutter = MillimetersToPoints(0)
        .FooterDistance = MillimetersToPoints(12.7)
        .PageWidth = MillimetersToPoints(419.9)
        .PageHeight = MillimetersToPoints(297)
        .LayoutMode = wdLayoutModeGrid
    End With
    Application.ScreenUpdating = True
    ur.EndCustomRecord  'Undoレコードここまで
End Sub
Sub To_A3_1dan()
'Undoのためのコード、以下の3行を入れないとこのマクロ実行後にUndoできない。
    Dim ur As Word.UndoRecord
    Set ur = Application.UndoRecord
    ur.StartCustomRecord "My Custom Undo"
   '1段組みに
    Application.ScreenUpdating = False
    If ActiveDocument.ActiveWindow.View.SplitSpecial <> wdPaneNone Then
        ActiveDocument.ActiveWindow.Panes(2).Close
    End If
    If ActiveDocument.ActiveWindow.ActivePane.View.Type <> wdPrintView Then
        ActiveDocument.ActiveWindow.ActivePane.View.Type = wdPrintView
    End If
    With Selection.PageSetup.TextColumns
        .SetCount NumColumns:=1
        .EvenlySpaced = True
        .LineBetween = False
    End With
    '横長A3用紙のサイズに
    With Selection.PageSetup
        .Orientation = wdOrientLandscape  '印刷の横長or縦長をしていする。これを入れないと印刷がおかしくなる。
        .TopMargin = MillimetersToPoints(20)
        .BottomMargin = MillimetersToPoints(20)
        .LeftMargin = MillimetersToPoints(25)
        .RightMargin = MillimetersToPoints(25)
        .HeaderDistance = MillimetersToPoints(7)
        .FooterDistance = MillimetersToPoints(10)
        .Gutter = MillimetersToPoints(0)
        .PageWidth = MillimetersToPoints(419.9)
        .PageHeight = MillimetersToPoints(297)
    End With
    Application.ScreenUpdating = True
    ur.EndCustomRecord  'Undoレコードここまで
End Sub
Sub To_A4_1dan()
'Undoのためのコード、以下の3行を入れないとこのマクロ実行後にUndoできない。
    Dim ur As Word.UndoRecord
    Set ur = Application.UndoRecord
    ur.StartCustomRecord "My Custom Undo"
   '1段組みに
    Application.ScreenUpdating = False
    If ActiveDocument.ActiveWindow.View.SplitSpecial <> wdPaneNone Then
        ActiveDocument.ActiveWindow.Panes(2).Close
    End If
    If ActiveDocument.ActiveWindow.ActivePane.View.Type <> wdPrintView Then
        ActiveDocument.ActiveWindow.ActivePane.View.Type = wdPrintView
    End If
    With Selection.PageSetup.TextColumns
        .SetCount NumColumns:=1
        .EvenlySpaced = True
        .LineBetween = False
    End With
    '縦長A4用紙のサイズに
    With Selection.PageSetup
        .Orientation = wdOrientPortrait  '印刷の横長or縦長をしていする。これを入れないと印刷がおかしくなる。
        .TopMargin = MillimetersToPoints(20)
        .BottomMargin = MillimetersToPoints(20)
        .LeftMargin = MillimetersToPoints(25)
        .RightMargin = MillimetersToPoints(25)
        .HeaderDistance = MillimetersToPoints(7)
        .FooterDistance = MillimetersToPoints(10)
        .Gutter = MillimetersToPoints(0)
        .PageWidth = MillimetersToPoints(210)
        .PageHeight = MillimetersToPoints(297)
    End With
    Application.ScreenUpdating = True
    ur.EndCustomRecord  'Undoレコードここまで
End Sub
標準モジュールにペースト

「開発」タブ→「マクロ」に表示されるマクロを実行すると、用紙サイズが簡単に変更できるようになります。

この時点でwordは閉じてしまって大丈夫です。上書き保存も不要です。

WordのVBAは基本的に、一度作ると、別のファイルを開いたときにもマクロが残っています。つまり、一度マクロを作成するとそのパソコンで開くどのWordファイルでもマクロを実行することができます。

これは、Excelのマクロと大きく違うところで、Wordマクロの利点です。

(解説)ExcelVBAとWordVBAの使い勝手の違い → 別記事へまとめる予定

リボンに登録してアドインっぽく使う。

前章の「完成コードコピペして利用」の時点で、そこそこ実用的なマクロとなっているかと思います。せっかくなのでもうひと手間加えて、さらに使いやすくしておきましょう。

「Wordのオプション」→「リボンのユーザー設定」から新しいタブを作成して、作成したマクロをリボンに登録していきます。

  • 「新しいタブ」 → 「名前の変更」 → (任意のタブ名)
  • 「新しいグループ」 → 「名前の変更」 → (任意のグループ名) 

タブとグループを増やします。今回は両方とも「オリジナルマクロ」という名前にしておきますが、もちろん好きなもので結構です。

「コマンド選択」 → 「マクロ」 と選択し、作成したマクロを追加していきます。

名前変更から、マクロの名前とアイコンを任意に決定できます。

マクロ名は「A4_一段」「A3_一段」「A3_二段」としていますが、これも好きな名前で結構です。アイコンも何を選んでもOKです。

これで、エクセルのリボンに作成したタブとグループが表示されます。冒頭で解説したように一瞬でWordのレイアウトのA3⇔A4を切り替えることができるようになります。

WordでVBAを活用するということ。

この記事では、Wordで用紙サイズのA4⇔A3を瞬時に切り替えるマクロを紹介しました。これをリボンに登録しておくだけでも、文書を作る際にかなり時短になります。

VBAコードはコピペですぐ使えるものですが、もちろん自分でコードを書くことで、いろいろな機能をWordに追加できます。

WordVBAはExcelVBAと違い、ネットで検索しても情報が少なく、難易度が高いように感じますが、そんなことはありません。この記事では紹介していませんが、Wordに備わっている「マクロの記録」機能が優秀なので、やりだすと意外に簡単です。

コメント

タイトルとURLをコピーしました