表の行と列を入れ替える方法
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
シートのインデックス番号を格納する変数「番号」を長整数型(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【オートフィット】メソッドを実行します。
以上で、表の行と列を入れ替える方法についての解説を終了します。ありがとうございました。