現場では表定義は縦形式が多いですが、
エビデンスや他作業時は横形式の方が良い場合もあるので、マクロで変換します。
Sub TblDefConversion()
'
' TblDefConversion Macro
'
' テーブル定義を縦から横に変換する。
' 変換後のエクセル用変数を宣言する。
Dim newBook As String
Dim NewWorkSheet As Worksheet
' 変換後のエクセルを追加する。
Workbooks.Add
newBook = ActiveWorkbook.Name
' 変換前のエクセル用変数を宣言する。
Dim oldWorkBook As Workbook
Set oldWorkBook = Workbooks("Book1.xlsx")
Dim oldWorkSheet As Worksheet
Dim tblNameRowPoint As Long ' テーブル名が存在する行数
Dim tblNameCellPoint As Long ' テーブル名が存在する列数
tblNameRowPoint = 4
tblNameCellPoint = 21
Dim colNameLogicalRowPoint As Long ' 項目名(論理名)が存在する行数
Dim colNameLogicalCellPoint As Long ' 項目名(論理名)が存在する列数
Dim colNamePhysicalRowPoint As Long ' 項目名(物理名)が存在する行数
Dim colNamePhysicalCellPoint As Long ' 項目名(物理名)が存在する列数
Dim colTypeRowPoint As Long ' 型が存在する行数
Dim colTypeCellPoint As Long ' 型が存在する列数
Dim colSizeRowPoint As Long ' サイズが存在する行数
Dim colSizeCellPoint As Long ' サイズが存在する列数
colNameLogicalRowPoint = 9
colNameLogicalCellPoint = 2
colNamePhysicalRowPoint = colNameLogicalRowPoint
colNamePhysicalCellPoint = 13
colTypeRowPoint = colNameLogicalRowPoint
colTypeCellPoint = 24
colSizeRowPoint = colNameLogicalRowPoint
colSizeCellPoint = 28
' 変換前のエクセルシート分繰り返す。
For Each oldWorkSheet In oldWorkBook.Worksheets
' 変換後のエクセルシートとA1セルに変換前のエクセルシート名を設定する。
' エクセルでは関数に()をつけると戻り値を伴う。
Workbooks(newBook).Activate
Set NewWorkSheet = Worksheets.Add()
MsgBox oldWorkSheet.Cells(tblNameRowPoint, tblNameCellPoint).Value
NewWorkSheet.Name = oldWorkSheet.Cells(tblNameRowPoint, tblNameCellPoint).Value
Cells(1, 1).Value = oldWorkSheet.Cells(tblNameRowPoint, tblNameCellPoint).Value
' 変換前エクセルの項目名の最初と最後を設定する。
oldWorkBook.Activate
oldWorkSheet.Activate
Dim i As Long
Dim MaxRow As Long
MaxRow = oldWorkSheet.Cells(Rows.Count, colNameLogicalCellPoint).End(xlUp).Row
' 変換前エクセルの項目名の最初から最後までを繰り返す。
For i = colNameLogicalRowPoint To MaxRow
' 項目名(論理名)、項目名(物理名)、型、サイズを取得する。
Dim colNameLogical As String
Dim colNamePhysical As String
Dim colType As String
Dim colSize As String
colNameLogical = Cells(i, colNameLogicalCellPoint).Value
colNamePhysical = Cells(i, colNamePhysicalCellPoint).Value
colType = Cells(i, colTypeCellPoint).Value
colSize = Cells(i, colSizeCellPoint).Value
' 変換後のエクセルに各々の値を取得する。
Workbooks(newBook).Activate
NewWorkSheet.Cells(2, i - colNameLogicalRowPoint + 1).Value = colNameLogical
NewWorkSheet.Cells(3, i - colNamePhysicalRowPoint + 1).Value = colNamePhysical
NewWorkSheet.Cells(4, i - colTypeRowPoint + 1).Value = colType
NewWorkSheet.Cells(5, i - colSizeRowPoint + 1).Value = colSize
' 変換前のエクセルをアクティブにしておく。
oldWorkBook.Activate
Next i
Next oldWorkSheet
End Sub