今日の仕事で、かなりの数の表の行と列を入れ替える必要がありました。
表の中の文字列には書式や蛍光ペンなどが設定されており、Excelでの行と列の入れ替えではうまくいかないような気がして(試していない汗)、Wordマクロの出番だ!ということでマクロを作りました。
Wordでも表の行と列を入れ替えができるみたいですね。こちらの記事を参考にさせていただきました。
<目次>
このマクロでできること
マクロの実行前
以下のように、すべてのセルに文字列が入っている表を対象にしています。処理対象とする表内にカーソルを置いて実行してください。
セル内に改行があると思い通りの結果を得られませんのでご注意ください。
あと、セルが縦方向や横方向に結合されていると誤動作になります。いろいろ制約がありますね(笑)。
マクロの実行後
マクロの解説
上記で紹介した記事「Word 表の行と列を入れ替える方法」の手順をマクロで実行しています。
工夫したところとして、10行、11行、44行目のコードによりUndoRecordオブジェクトを利用しています。これはWord 2010 以降で使えるようになった機能で、Ctrl + Z のUndoでマクロ実行前の状態に戻れるようにするというものです。
マクロ
Sub 表の行と列を入れ替えるWordマクロ() Dim i As Integer Dim myRowCount As Integer Dim myColumnCount As Integer Dim myRange As Range Dim objUndo As UndoRecord 'UndoRecordの利用 Set objUndo = Application.UndoRecord objUndo.StartCustomRecord ("表の行と列の入れ替え") With Selection.Tables(1) myRowCount = .Rows.Count myColumnCount = .Columns.Count 'セルを列で結合 For i = 1 To myColumnCount .Columns(i).Cells.Merge Next i '表を段落記号で解除 Set myRange = .Rows.ConvertToText(Separator:=wdSeparateByParagraphs) '文字列を表に変換 With myRange '表に変換 .ConvertToTable _ Separator:=wdSeparateByParagraphs, _ NumColumns:=myRowCount, _ NumRows:=myColumnCount, _ AutoFitBehavior:=wdAutoFitFixed '表の罫線の設定 .Tables(1).Style = "表 (格子)" End With End With 'UndoRecordの終了 objUndo.EndCustomRecord Set objUndo = Nothing Set myRange = Nothing End Sub