EXCELマクロで表の行と列を一発変換する

2021年10月25日

EXCELで表の行と列を変換したい場合、通常は手作業で以下の操作をして変換しますが、

 ・変換元の表をコピー
 ・変換先を指定して貼り付けする際に「形式を選択して貼り付け」を選択する
 ・「行/列の入れ替え」にチェックマークを入れて貼り付ける

定型の表で繰り返し変換する必要がある場合は、EXCELマクロを使うと非常に便利です。
マクロを利用するとボタンをクリックするだけで変換してくれますので、業務の効率化を行う上で有効な手段になります。今回は行と列を変換するEXCELマクロのサンプルをご紹介しますので業務の中でご活用下さい。

サンプルコードの処理内容

「行列変換」ボタンをクリックすると、下の表に行列が変換されてデータがコピーされます。

サンプルコード    コードの作成手順はこちら

Option Explicit '変数の宣言を強制する

Sub 行列変換()

'変数を宣言する
  Dim WSh As Worksheet  'シート名の変数を定義
  Dim LastRow As Long   'データ最終行の位置を定義
  Dim LastCol As Long   'データ最終列の位置を定義

   '「Sheet1」シート選択
   Worksheets("Sheet1").Select
   
   '変換先データの削除
   Set WSh = Worksheets("Sheet1")
   LastRow = WSh.Cells(Rows.Count, 2).End(xlUp).Row                 'データ範囲の最終行を変数に格納
   LastCol = WSh.Cells(10, Columns.Count).End(xlToLeft).Column      'データ範囲の最終列を変数に格納
   If LastRow > 19 Then                                             '変換データがあればデータ削除
     WSh.Range(Cells(10, 2), Cells(LastRow, LastCol)).ClearContents 'データ削除
   End If

  '行列変換変換コピー処理
  Worksheets("Sheet1").Range("B3:G6").Copy                                             '変換元データコピー
  Worksheets("Sheet1").Range("B10").PasteSpecial Transpose:=True, Paste:=xlPasteValues '行列変換して値貼付け
  
  
  'Dim range1 As Range
  'Set range1 = Worksheets("Sheet1").Range("B20:N25")
  'range1.IndentLevel = 1

  '数字が入るセルを右寄せにする
  Dim range2 As Range  'データ範囲を定義
  Set range2 = Worksheets("Sheet1").Range("C13:E15")  '右寄せする範囲を指定
  range2.HorizontalAlignment = xlRight                '右寄せを指定

  'セル「A1」を選択して終了
  Range("A1").Select

End Sub

関数の説明

マクロで行列を変換するには、PasteSpecialメソッドを使います。
上記サンプルコードで「PasteSpecialメソッド」が使われている箇所は以下の箇所です。
———————————————————————————————————
 行列変換変換コピー処理
 ’変換元データコピー
  Worksheets(“Sheet1").Range(“B3:G6").Copy
  ’行列変換して値貼付け
  Worksheets(“Sheet1").Range(“B10").PasteSpecial Transpose:=True, Paste:=xlPasteValues

———————————————————————————————————-
「PasteSpecialメソッド」では カッコ内に示されているパラメータ 「Paste」,「Operation」, 「SkipBlanks」, 「Transpose」 を使って貼り付け形式を指定します。

Range.PasteSpecial(Paste, Operation, SkipBlanks, Transpose)

今回のサンプルコードでは列と行を変換するので「Transpose:=True」としています。
また、「Paste:=xlPasteValues 」で変換したデータを値貼り付けしています。
具体的なパラメータの指定方法は下記表をご覧ください。

名前指定値説明
PastexlPasteAllすべてを貼り付けます。
Paste xlPasteAllExceptBorders輪郭以外のすべてを貼り付けます。
Paste xlPasteAllMergingConditionalFormatsすべてを貼り付け、条件付き書式をマージします。
Paste xlPasteAllUsingSourceThemeソースのテーマを使用してすべてを貼り付けます。
Paste xlPasteColumnWidthsコピーした列の幅を貼り付けます。
Paste xlPasteCommentsコメントを貼り付けます。
Paste xlPasteFormats書式を貼り付けます。
Paste xlPasteFormulas数式を貼り付けます。
Paste xlPasteFormulasAndNumberFormats数式と数値の書式を貼り付けます。
Paste xlPasteValidation入力規則を貼り付けます。
Paste xlPasteValues値を貼り付けます。
 Paste xlPasteValuesAndNumberFormats値と数値の書式を貼り付けます。
OperationxlPasteSpecialOperationAddコピーしたデータは、対象セルの値に加算されます。
Operation xlPasteSpecialOperationDivideコピーしたデータは、対象セルの値によって割り算されます。
Operation xlPasteSpecialOperationMultiplyコピーしたデータには、対象セルの値に掛け算されます。
Operation xlPasteSpecialOperationSubtractコピーしたデータは、対象セルの値に引き算されます。
Operation xlPasteSpecialOperationNone貼り付け操作で計算は行われません。
SkipBlanksTrue / Falseクリップボードに含まれる空白のセルを貼り付けの対象にしないようにするには、True を指定します。既定値は False です。
TransposeTrue / False貼り付けのときにデータの行と列を入れ替えるには、True を指定します。既定値は False です。