Word VBA/マクロ 備忘録

作業効率化のため作成したマクロをバックアップ代わりにアップしていきます。

【Word VBA/マクロ】よく使用するコード、便利コード

簡単なコードが意外と出て来ないので、よく使用するコードをまとめておきます。
段落、図、表、ヘッダーフッター構文はこちら
検索の基本構文はこちら

Sub 文書の先頭に移動()
    ActiveDocument.Range(0, 0).Select
End Sub
Sub 文書の最後に移動()
    ActiveDocument.Bookmarks("\EndOfDoc").Select
End Sub
Sub 文頭まで選択拡張()
'本文にカーソルがある時は文書の最初まで選択範囲が拡張
    Selection.StartOf wdStory, wdExtend
End Sub
Sub 文末まで選択拡張
'本文にカーソルがある時は文書の末尾まで選択範囲が拡張
    Selection.EndKey wdStory, wdExtend
End Sub
Sub 文頭に移動()
'本文にカーソルがある時は文書の最初まで移動
    Selection.StartOf wdStory, wdMove
End Sub
Sub 文末に移動()
'本文にカーソルがある時は文書の最後に移動
    Selection.EndKey Unit:=wdStory
End Sub
Sub 文末に移動2()
'本文にカーソルがあるときは文書の最後に移動
    With Selection
        .MoveEnd wdStory
        .Collapse wdCollapseEnd
    End With
End Sub
Sub 段落全体選択()
    With Selection
        .SetRange .Paragraphs(1).Range.Start, _
            .Paragraphs.Last.Range.End
    End With
End Sub
Sub 段落全体選択2()
'カーソルの段落を最初から最後まで選択
    With Selection
        .StartOf wdParagraph, wdExtend
        .EndOf wdParagraph, wdExtend
    End With
End Sub
Sub 最終段落削除()
    ActiveDocument.Paragraphs.Last.Range.Delete
End Sub
Sub 範囲を右にずらす()
    Dim rng As Range
'…省略…
    rng.MoveStart wdCharacter, 1
'…省略…
End Sub
Sub 段落末にカーソルを移動()
    With Selection
        .MoveEnd Unit:=wdParagraph
        .MoveEnd Unit:=wdCharacter, Count:=-1
        .Collapse wdCollapseEnd
    End With
End Sub
Sub 段落末にカーソルを移動2()
    With Selection
        .MoveEndUntil vbCr
        .Collapse wdCollapseEnd
    End With
End Sub
Sub アクティブページを選択()
    ActiveDocument.Bookmarks("\Page").Select
End Sub
Sub 最初の段落を取得() 
    Dim rngParagraph As Range
    Set rngParagraph = ActiveDocument.Paragraphs(1).Range
End Sub
Sub カーソル位置から段落記号の前まで選択()
  With Selection.Range
     .MoveEndUntil vbCr
    .Select
  End With
End Sub
Sub 本文全てコピー()
    ActiveDocument.Content.Copy
End Sub
Sub 指定した文字列の総バイト数取得()
    Debug.Print LenB(StrConv(文字列, vbFromUnicode))
End Sub
Sub 文頭の場合()
    Dim rng As Range
    '…省略…    
    '検索結果が文頭の場合などに使用
    If rng.Start = ActiveDocument.Range.Start Then
  '…省略…    
    End If
End Sub
Sub 文末の場合()
    Dim rng As Range, para As Paragraph
    '…省略…    
    If rng .End = ActiveDocument.Range.End Then
 '…省略…    
    End If
End Sub
Sub 最終段落を取得()
    Dim par As Paragraph
    Set par = ActiveDocument.Paragraphs.Last    
End Sub
Sub 選択段落の文字を表示()
    Dim par As Paragraph    
    For Each par In Selection.Paragraphs
        MsgBox par.Range.Text
    Next
End Sub
Sub Rangeオブジェクト作成_文書先頭~10文字()
  Dim rngDoc As Range
  Set rngDoc = ActiveDocument.Range(Start:=0, End:=10)
End Sub
Sub Rangeオブジェクトの再定義()
'選択範囲をRangeオブジェクトに定義した後、
'SetRange メソッドを使用して、10文字分拡張した範囲を
'Rangeオブジェクトに再定義します。
    Dim rng As Range
    Set rng = Selection.Range    
    rng.SetRange Start:=rng.Start, _
    End:=rng.End + 10
End Sub
Sub Rangeオブジェクト作成_2つめの段落先頭~3つめの段落最後まで()
    Dim doc As Document
    Dim rngDoc As Range
    Set doc = ActiveDocument
    Set rngDoc = doc.Range(Start:=doc.Paragraphs(2). _
    Range.Start, End:=doc.Paragraphs(3).Range.End)
End Sub
Sub 表のデータを配列に格納()
    Dim r_cnt As Long, c_cnt As Long
    Dim tbl As Table
    Dim arr() As String
    Dim r As Long, c As Long
    On Error Resume Next
    If Selection.Information(wdWithInTable) = False Then
        MsgBox "表にカーソルを置いて実行してください"
        Exit Sub
    End If
    
    Set tbl = Selection.Tables(1)
    r_cnt = tbl.Rows.Count
    c_cnt = tbl.Columns.Count

    ReDim arr(1 To r_cnt, 1 To c_cnt) As String

    For r = 1 To r_cnt
        For c = 1 To c_cnt
            Dim txt As String
            txt = tbl.Cell(r, c).Range.Text
            arr(r, c) = Left(txt, Len(txt) - 2)
        Next c
    Next
End Sub
Sub Excel操作()
'VBAのGetObject関数を使って、起動済みExcelの
'Applicationオブジェクトへの参照を取得します。
Dim exApp As Excel.Application
On Error GoTo ErrHandl
    Set exApp = GetObject(Class:="Excel.Application")
Exit Sub
ErrHandl:
    Select Case Err.Number
        Case 429
            MsgBox "Excelが起動していないようです"
        Case 4248
            MsgBox "Excelファイルが開かれていないようです"
        Case Else
            MsgBox Err.Description & vbCrLf & Err.Number
    End Select
End Sub


検索、段落、表、図、ヘッダーフッターの基本構文は、次の2つの記事へ移動しました。
rapoppo.hatenadiary.jp

rapoppo.hatenadiary.jp