Excel VBA 表の行と列を入れ替える

スポンサーリンク
スポンサーリンク

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

A1セルから始まる表範囲の行と列を入れ替える方法をご紹介します。
アクティブシートのA1セルから始まる表を
Range【レンジ】オブジェクトの
Copy【コピー】メソッドを使用して
コピーしてクリップボードに保管します。
新しいシートを追加して
その新しいシートに
Range【レンジ】オブジェクトの
「形式を選択して貼り付ける」ダイアログボックスの項目を表す
PasteSpecial【ペーストスペシャル】メソッドを使用し
行と列を入れ替える引数Transpose【トランスポース】に
Trueを設定して行と列を入れ替えて
クリップボードに保管されているデータを貼り付けます。
元のシートにある表をクリアして
追加したシートの行と列が入れ替わった表をコピーして
クリップボードを経由せずに
元のシートのA1セルに貼り付けます。
これで、行と列が入れ替わった表が作成されます。
なお、一時的に行と列の入れ替わった表を貼り付けた
追加した新しいシートは削除します。

実行イメージ

コード例

Sub 行列入替え()
Dim 番号 As Long
    番号 = ActiveSheet.Index
    Sheets(番号).Range("A1").CurrentRegion.Copy
    Sheets.Add(After:=ActiveSheet).Name = "貼付"
    Range("A1").PasteSpecial Paste:=xlPasteAll,Transpose:=True
With Sheets(番号).Range("A1").CurrentRegion
    .ClearContents
    .ClearFormats
End With
    Sheets("貼付").Range("A1").CurrentRegion.Copy Sheets(番号).Range("A1")
    Application.DisplayAlerts = False
      Sheets("貼付").Delete
    Application.DisplayAlerts = True
    Sheets(番号).Range("A1").Select
    Cells.Rows.AutoFit
    Cells.Columns.AutoFit
End Sub

コード解説

1行目
【Dim 番号 As Long】

シートのインデックス番号を格納する
変数「番号」を
長整数型(Long)で宣言します。


2行目
【番号 = ActiveSheet.Index】

Worksheet【ワークシート】オブジェクトの
Index【インデックス】プロパティで
アクティブシートのインデックス番号を取得して
変数「番号」に代入します。


3行目
【Sheets(番号).Range(“A1”).CurrentRegion.Copy】

表があるシート(アクティブシート)を
のA1セルから
Range【レンジ】オブジェクトの
CurrentRegion【カレントリージョン】プロパティ
表範囲を参照し、Copy【コピー】メソッドを使用して
A1セルから始まる表範囲をコピーします。


4行目
【Sheets.Add(After:=ActiveSheet).Name = “貼付”】

Sheets【シーツ】コレクションの
Add【アド】メソッドを使用してワークシトを追加します。
引数After【アフター】にはアクティブシートを設定し
表があるシートの後にシートを追加します。
Add【アド】メソッドによって追加されたワークシートを表す
Worksheet【ワークシート】オブジェクトの
Name【ネーム】プロパティを使用して
シート名を設定します。


5行目
【Range(“A1”).PasteSpecial Paste:=xlPastAll,Transpose:=True】

アクティブになっている追加されたシート「貼付」の
A1セルを基準として
Range【レンジ】オブジェクトの
クリップボードのデータを内容を指定して貼り付ける
PasteSpecial【ペーストスペシャル】メソッドを使用して
クリップボードのデータを貼り付けます。
貼り付ける内容を表す
引数Paste【ペースト】は「すべて」を表すxlPastAll
行と列を入れ替えるかどうかを表す
引数Transpose【トランスポース】にTrueを設定して
行と列を入れ替えるに設定します。


6行目
【With Sheets(番号).Range(“A1”).CurrentRegion】

元の表があるシートの表範囲を
CurrentRegion【カレントリージョン】プロパティで参照して
Withステートメントで指定します。


7行目
【.ClearContents】

Withステートメントで指定した
表範囲を表すRange【レンジ】オブジェクトの
ClearContents【クリアコンテンツ】メソッドを使用して
書式設定を除く値や数式を削除します。


8行目
【.ClearFormats】

Withステートメントで指定した
表範囲を表すRange【レンジ】オブジェクトの
ClearFormats【クリアフォーマッツ】メソッドを使用して
罫線やセルの色などの「セルの書式」を削除します。


10行目
【Sheets(“貼付”).Range(“A1”).CurrentRegion.Copy Sheets(番号).Range(“A1”)】

追加した「貼付」シートのA1セルから始まる
表範囲をCurrentRegion【カレントリージョン】プロパティで参照して
Copy【コピー】メソッドでコピーして
貼付先を表す
引数Destination【ディスティネーション】に元の表があったシートの
A1セルを指定してクリップボードを経由せずにデータを貼り付けます。


11行目
【Application.DisplayAlerts = False】

Application【アプリケーション】オブジェクトの
DisplayAlerts【ディスプレイアラーツ】プロパティに
Falseを設定して、次に実行するシートの削除処理時の
アラート(注意メッセージ)を抑制します。


12行目
【Sheets(“貼付”).Delete】

コピーした表の一時的な待避場所となった
追加したシート「貼付」を
Worksheet【ワークシート】オブジェクトの
Delete【デリイト】メソッドで削除します。


13行目
【Application.DisplayAlerts = True】

Application【アプリケーション】オブジェクトの
DisplayAlerts【ディスプレイアラーツ】プロパティに
Trueを設定して、抑制していたアラート(注意メッセージ)が
表示されるようにします。
(※マクロの実行が終了すると自動的にTrueにもどりますが
不意なトラブルを防ぐためにTrueに設定するステートメントを
明示的に記述しておきましょう)


14行目
【Sheets(番号).Range(“A1”).Select】

行と列が入れ替わった元のシートのA1セルを選択します。


15行目
【Cells.Rows.AutoFit】

すべてのセルを表す
Cells【セルズ】コレクションの
Rows【ロウズ】プロパティで
シート内のすべての行を参照して
文字列にあわせてセルの高さを自動調整する
AutoFit【オートフィット】メソッドを実行します。


16行目
【Cells.Columns.AutoFit】

すべてのセルを表す
Cells【セルズ】コレクションの
Columns【カラムズ】プロパティで
シート内のすべての列を参照して
文字列にあわせてセルの幅を自動調整する
AutoFit【オートフィット】メソッドを実行します。


以上で
表の行と列を入れ替える方法についての解説を終了します。
ありがとうございました。

スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク