Wordで画像や図形が余白にはみ出していたり、ドラッグで適当に調整した結果サイズがまちまちだったりということがよくあります。そうした画像や図形のサイズを、段落の幅に合わせてきちんとそろえるマクロです。
なお、ここで扱う画像や図形は「行内」で配置されたものを対象としています。
図 (InlineShape)、図形(Shape/wdWrapInline)の幅を最適化するマクロ
選択範囲内にある図 (InlineShape)、図形・行内(Shape/wdWrapInline)の幅を、配置されている段落領域の幅に合わせます。
Sub 図と図形の幅を最適化()
Dim i As Long
Dim widRng As Single ' 編集領域有効幅
Dim widFull As Single '画像原寸幅(ポイント)
With Selection.Range
For i = 1 To .ShapeRange.Count
With .ShapeRange(i)
If .WrapFormat.Type = wdWrapInline Then
.Width = f_GetMaxWidth(.Anchor)
End If
End With
Next i
End With
With Selection
For i = 1 To .InlineShapes.Count
With .InlineShapes(i)
widRng = f_GetMaxWidth(.Range)
Select Case .Width - widRng
Case Is > 0 '縮小不足(はみ出し)の対応
.Width = widRng
Case Is < 0 '縮小過多の対応(原寸以下かつ領域幅内)
If .ScaleWidth < 100 Then
widFull = .Width / (.ScaleWidth / 100) '原寸
If widFull < widRng Then
ScaleWidth = 100
Else
.Width = widRng
End If
End If
End Select
'縦横比が異なる場合はそろえる
If .ScaleHeight <> .ScaleWidth Then
ScaleHeight = .ScaleWidth
End If
End With
Next i
End With
End Sub
Function f_GetMaxWidth(RNG As Range) As Single
Dim widMax As Single
With RNG
If .Information(wdWithInTable) Then
'表内の場合はセル幅と余白値から
With .Cells(1)
widMax = .Width - (.LeftPadding + .RightPadding)
End With
Else
'セクション幅(段組幅が異なる場合には非対応)
widMax = .Sections(1).PageSetup.TextColumns(1).Width
End If
'段落の幅(左右インデント)
With .Paragraphs(1)
widMax = widMax - (.LeftIndent + RightIndent)
End With
End With
f_GetMaxWidth = widMax
End Function
解説
図(画像など)と図形は似ていますがまったく別のオブジェクトなので、別個に扱う必要があります。詳しくは以下を参照してください。
段落の幅に合わせるといっても、その値を直接返すプロパティはないので、いくつかのプロパティから算出する必要があります。これを f_GetMaxWidth という関数化しています。この関数については以下を参照してください。
テキストと並べて配置する画像のサイズ調整についてはこちらです。