【VBA】Wordで画像を選択して挿入するマクロ

VBA

Microsoft Wordで作業をしていると、複数の画像を指定の位置に一括で挿入したいという場面があるかもしれません。今回は、ユーザーが選択した画像を文書の2ページ目に挿入するVBAマクロを紹介します。このマクロは、画像の挿入を簡単にするだけでなく、コードを汎用的に使用できるように修正も加えました。

マクロの全体像

以下が、汎用性を考慮して作成した画像挿入マクロのコードです。

Sub InsertAndEnterImages()
    Dim fd As FileDialog
    Dim fileChosen As Integer
    Dim i As Integer
    Dim img As InlineShape
    Dim rng As Range

    ' ファイルダイアログを表示して画像を選択
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    With fd
        .Title = "Select Images"
        .Filters.Add "Images", "*.gif; *.jpg; *.jpeg; *.bmp; *.png", 1
        .AllowMultiSelect = True
        .InitialFileName = ""
        fileChosen = .Show
    End With

    ' 画像が選択されなかった場合、マクロを終了
    If fileChosen <> -1 Then
        Exit Sub
    End If

    ' 文書が1ページ以下の場合は、改行を挿入して2ページ目を作成
    If ActiveDocument.ComputeStatistics(wdStatisticPages) < 2 Then
        ActiveDocument.Content.InsertAfter vbCr & vbCr
    End If

    ' 2ページ目の開始位置を取得
    Set rng = ActiveDocument.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=2)
    rng.Collapse Direction:=wdCollapseStart

    ' 画像を挿入
    For i = 1 To fd.SelectedItems.Count
        Set img = ActiveDocument.InlineShapes.AddPicture(FileName:=fd.SelectedItems(i), LinkToFile:=False, SaveWithDocument:=True, Range:=rng)
        img.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
        rng.Collapse Direction:=wdCollapseEnd
    Next i
End Sub

コードの詳細解説

1. 画像の選択

Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)

この部分では、ユーザーが画像ファイルを選択できるようにファイルダイアログを作成しています。msoFileDialogFilePicker は、ファイルを選択するためのダイアログボックスを表示するオプションです。

With fd
    .Title = "Select Images"
    .Filters.Add "Images", "*.gif; *.jpg; *.jpeg; *.bmp; *.png", 1
    .AllowMultiSelect = True
    .InitialFileName = ""
    fileChosen = .Show
End With
  • Title: ダイアログのタイトルを設定します。
  • Filters: 画像ファイルのみを選択できるようにフィルタを追加します。
  • AllowMultiSelect: 複数の画像を選択可能にします。

ユーザーがファイルを選択しなかった場合、マクロが終了するようにしています。

If fileChosen <> -1 Then
    Exit Sub
End If

2. 2ページ目の開始位置の取得

If ActiveDocument.ComputeStatistics(wdStatisticPages) < 2 Then
    ActiveDocument.Content.InsertAfter vbCr & vbCr
End If

Set rng = ActiveDocument.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=2)
rng.Collapse Direction:=wdCollapseStart
  • ComputeStatistics(wdStatisticPages): 文書のページ数を取得します。文書が1ページしかない場合、改行を追加して2ページ目を作成します。
  • GoTo: 文書の特定のページや位置に移動します。ここでは2ページ目の開始位置にカーソルを移動しています。

3. 画像の挿入

For i = 1 To fd.SelectedItems.Count
    Set img = ActiveDocument.InlineShapes.AddPicture(FileName:=fd.SelectedItems(i), LinkToFile:=False, SaveWithDocument:=True, Range:=rng)
    img.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
    rng.Collapse Direction:=wdCollapseEnd
Next i
  • AddPicture: 画像を指定した範囲に挿入します。
  • ParagraphFormat.Alignment: 画像を文書内で中央揃えにします。
  • Collapse Direction:=wdCollapseEnd: 画像を挿入した後、カーソルを次の挿入位置に移動させます。

コードのカスタマイズ例

このマクロは汎用性を持たせているため、特定のニーズに応じて簡単にカスタマイズすることができます。

  • 挿入位置の変更: 画像を特定のページではなく、文書の最後に挿入するように変更することも可能です。
  • 画像サイズの変更: 画像の挿入時にサイズを自動調整するコードを追加することもできます。
img.LockAspectRatio = msoTrue
img.Width = CentimetersToPoints(10)

このように、挿入される画像の幅を10cmに設定し、高さは自動的に調整することができます。

まとめ

このマクロを使用すれば、複数の画像を簡単に文書の指定ページに挿入することができます。汎用的に使えるように構成されているため、さまざまなシナリオに応じてカスタマイズが可能です。ぜひ、あなたのプロジェクトに役立ててください。


Wordに挿入した画像ってサイズとか変えずらいの何でだろうね

ではまたー

コメント

  1. 松原 より:

    【VBA】Wordで画像を選択して挿入するマクロについて

    お世話になります。
    マクロ初心者ですがお手柔らかにお願い致します。

    下記コードをコピーして使用させて頂いてますが、わからないところがあるのでお教え願えないでしょうか?

    画像の貼りつけ時にページの先頭ではなく5行目から貼りつけたい場合はどのようにしたらいいでしょうか?

    お手数をお掛けしますがご回答よろしくお願い致します。

    Sub InsertAndEnterImages()
    Dim fd As FileDialog
    Dim fileChosen As Integer
    Dim i As Integer
    Dim img As InlineShape
    Dim rng As Range

    ‘ ファイルダイアログを表示して画像を選択
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    With fd
    .Title = “Select Images”
    .Filters.Add “Images”, “*.gif; *.jpg; *.jpeg; *.bmp; *.png”, 1
    .AllowMultiSelect = True
    .InitialFileName = “”
    fileChosen = .Show
    End With

    ‘ 画像が選択されなかった場合、マクロを終了
    If fileChosen -1 Then
    Exit Sub
    End If

    ‘ 文書が1ページ以下の場合は、改行を挿入して2ページ目を作成
    If ActiveDocument.ComputeStatistics(wdStatisticPages) < 2 Then
    ActiveDocument.Content.InsertAfter vbCr & vbCr
    End If

    ' 2ページ目の開始位置を取得
    Set rng = ActiveDocument.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=2)
    rng.Collapse Direction:=wdCollapseStart

    ' 画像を挿入
    For i = 1 To fd.SelectedItems.Count
    Set img = ActiveDocument.InlineShapes.AddPicture(FileName:=fd.SelectedItems(i), LinkToFile:=False, SaveWithDocument:=True, Range:=rng)
    img.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
    rng.Collapse Direction:=wdCollapseEnd
    Next i
    End Sub

    • cova-z-friend より:

      ご質問ありがとうございます!🙏
      コードを拝見しました。今のマクロは

      1. 画像を選んで
      2. 文書の 2 ページ目の先頭に貼り付ける

      という流れになっています。

      変更したいこと

      > ページの先頭ではなく、5行目から貼り付けたい
      つまり「最初のページの文書の5行目にカーソルを移動してから画像を貼り付けたい」ということであっていますでしょうか?

      上記の場合もともとのコードでは
      ‘ 2ページ目の開始位置を取得
      Set rng = ActiveDocument.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=2)
      となっていた部分を

      ‘ 5行目の先頭位置を取得
      Set rng = ActiveDocument.GoTo(What:=wdGoToLine, Which:=wdGoToAbsolute, Count:=5)

      に変更すればOKです。
      それ以外はそのままで大丈夫です。

      修正版全体コードを以下に示します。

      Sub InsertAndEnterImages()
      Dim fd As FileDialog
      Dim fileChosen As Integer
      Dim i As Integer
      Dim img As InlineShape
      Dim rng As Range

      ‘ ファイルダイアログを表示して画像を選択
      Set fd = Application.FileDialog(msoFileDialogFilePicker)
      With fd
      .Title = “Select Images”
      .Filters.Add “Images”, “*.gif; *.jpg; *.jpeg; *.bmp; *.png”, 1
      .AllowMultiSelect = True
      .InitialFileName = “”
      fileChosen = .Show
      End With

      ‘ 画像が選択されなかった場合、マクロを終了
      If fileChosen <> -1 Then Exit Sub

      ‘ 5行目の先頭位置を取得
      Set rng = ActiveDocument.GoTo(What:=wdGoToLine, Which:=wdGoToAbsolute, Count:=5)
      rng.Collapse Direction:=wdCollapseStart

      ‘ 画像を挿入
      For i = 1 To fd.SelectedItems.Count
      Set img = ActiveDocument.InlineShapes.AddPicture( _
      FileName:=fd.SelectedItems(i), _
      LinkToFile:=False, _
      SaveWithDocument:=True, _
      Range:=rng)
      img.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
      rng.Collapse Direction:=wdCollapseEnd
      Next i
      End Sub

      これで文書の「5行目から画像が挿入」されるようになります✨


      確認ですが、
      「常に文書の5行目から貼りたい」のか、それとも「最初だけ5行目から貼りたい」のか、どちらを想定されていますか?

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