6年以上前、Wordに貼り付けたソースコードを番号付きのテーブルに変換するマクロを書きました。
改めて使ってみると、一部使用を変えた方が使いやすくなるのではないかと思い、マクロを書き直してみました。
下記コードで変換されるテーブルの書式は、モノクロ印刷を想定したものです。
文字色やサイズ、罫線の線種等、自分の好みに合わせて適当に変更してください。
Public Sub SourceCodeToTable()
'選択しているソースコードを表形式で出力
Dim tbl As Word.Table
Dim ur As Word.UndoRecord
Dim str As String
Dim v As Variant
Dim i As Long
Dim w As Single
If ChkCondition = False Then
MsgBox "ソースコードを選択した状態で実行してください。", vbExclamation + vbSystemModal
Exit Sub
End If
Application.ScreenUpdating = False
Set ur = Application.UndoRecord
ur.StartCustomRecord "ソースコード変換処理"
On Error GoTo Err:
'最後の改行を選択範囲から外す
Select Case AscW(Selection.Characters.Last)
Case &HB, &HD: Selection.MoveEnd wdCharacter, -1
End Select
str = Selection.Text
str = Replace(str, ChrW(&HB), ChrW(&HD)) '段落内改行置換
v = Split(str, ChrW(&HD))
Set tbl = Selection.Tables.Add(Selection.Range, UBound(v) + 1, 2)
'フォント設定
With tbl.Range.Font
.Size = 10
.NameFarEast = "MS ゴシック"
.NameAscii = "MS ゴシック"
.NameOther = "MS ゴシック"
.Bold = False
.Italic = False
.Underline = wdUnderlineNone
.UnderlineColor = wdColorAutomatic
.StrikeThrough = False
.DoubleStrikeThrough = False
.Outline = False
.Emboss = False
.Shadow = False
.Hidden = False
.SmallCaps = False
.AllCaps = False
.Color = wdColorAutomatic
.Engrave = False
.Superscript = False
.Subscript = False
End With
'段落設定
With tbl.Range.ParagraphFormat
.LineSpacingRule = wdLineSpaceSingle '行間:1行
.WordWrap = False '[英単語の途中で改行する]にチェック
End With
For i = LBound(v) To UBound(v)
tbl.Cell(i + 1, 1).Range.Text = i + 1
tbl.Cell(i + 1, 2).Range.Text = v(i)
Next
'幅設定
tbl.AutoFitBehavior wdAutoFitWindow
w = tbl.Columns(1).Width + tbl.Columns(2).Width
tbl.Columns(1).Width = 35
tbl.Columns(2).Width = w - 35
'配置設定
tbl.Range.Cells.VerticalAlignment = wdCellAlignVerticalCenter
tbl.Range.ParagraphFormat.Alignment = wdAlignParagraphJustify
'罫線設定
With tbl.Borders
.OutsideColor = wdColorAutomatic
.OutsideLineStyle = wdLineStyleSingle
.OutsideLineWidth = wdLineWidth050pt
End With
With tbl.Borders(wdBorderHorizontal)
.Color = wdColorAutomatic
.LineStyle = wdLineStyleDot
.LineWidth = wdLineWidth050pt
End With
With tbl.Columns(1).Borders(wdBorderRight)
.Color = wdColorAutomatic
.LineStyle = wdLineStyleSingle
.LineWidth = wdLineWidth050pt
End With
'背景色設定
With tbl.Shading
.Texture = wdTextureNone
.ForegroundPatternColor = wdColorAutomatic
.BackgroundPatternColor = &HDC00F2FF
End With
'行番号列書式設定
tbl.Columns(1).Shading.BackgroundPatternColor = &H333333
tbl.Columns(1).Select
Selection.Font.Color = &HFFFFFF
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
Selection.Collapse wdCollapseStart
Err:
If Not ur Is Nothing Then
If ur.IsRecordingCustomRecord = True Then ur.EndCustomRecord
End If
Application.ScreenUpdating = True
End Sub
Private Function ChkCondition() As Boolean
'プロシージャが実行できる状況なのかを確認
Dim ret As Boolean
Dim chrs As Variant
Dim tmp As String
Dim i As Long
ret = True '初期化
If Selection.Type <> wdSelectionNormal Then ret = False 'テキストが選択状態にあるかを確認
tmp = Selection.Text
'改行と空白文字のコード
'空白: http://en.wikipedia.org/wiki/Space_%28punctuation%29 参照
chrs = Array(&HB, &HD, &H20, &HA0, &H1680, &H180E, &H2000, &H2001, &H2002, &H2003, _
&H2004, &H2005, &H2006, &H2007, &H2008, &H2009, &H200A, &H200B, &H200C, &H200D, _
&H202F, &H205F, &H2060, &H3000, &HFEFF)
For i = LBound(chrs) To UBound(chrs)
tmp = Replace(tmp, ChrW(chrs(i)), "")
Next
If Len(tmp) < 1 Then ret = False
ChkCondition = ret
End Function
ソースコードを選択した状態で上記マクロを実行すると、ソースコードが下図のように行番号付きのテーブルに変換されます。
以前のマクロとの大きな違いは、下図のように折り返されている行も一行としている点と、UndoRecordオブジェクトを使うことによって、マクロで行っている一連の表化処理を後から一括で元に戻せるようにしている点です。
UndoRecordオブジェクトは、Word 2010で追加された機能であるため、それ以前のWordでは動作しませんが、使い方によっては非常に便利なオブジェクトです。

























大変助かりました。
本当にありがとうございます!!