【Word VBA】Wordの表の行と列を入れ替えるWordマクロ

2019年8月21日

今日の仕事で、かなりの数の表の行と列を入れ替える必要がありました。

表の中の文字列には書式や蛍光ペンなどが設定されており、Excelでの行と列の入れ替えではうまくいかないような気がして(試していない汗)、Wordマクロの出番だ!ということでマクロを作りました。

Wordでも表の行と列を入れ替えができるみたいですね。こちらの記事を参考にさせていただきました。

Word 表の行と列を入れ替える方法

このマクロでできること

マクロの実行前

以下のように、すべてのセルに文字列が入っている表を対象にしています。処理対象とする表内にカーソルを置いて実行してください。

セル内に改行があると思い通りの結果を得られませんのでご注意ください。

あと、セルが縦方向や横方向に結合されていると誤動作になります。いろいろ制約がありますね(笑)。

マクロの実行後

マクロの解説

上記で紹介した記事「Word 表の行と列を入れ替える方法」の手順をマクロで実行しています。

工夫したところとして、10行、11行、44行目のコードによりUndoRecordオブジェクトを利用しています。これはWord 2010 以降で使えるようになった機能で、Ctrl + ZUndoでマクロ実行前の状態に戻れるようにするというものです。

マクロ


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

-コード
-,