| 
    
     |  | こんにちは。かみちゃん です。 
 >>もし、Sheet2への出力がかみちゃんにとって大変な作業であれば、あまりご迷惑をおかけするのも申し訳けありませんので、Sheet1への出力でもかまいません。
 >
 >改造に少しお時間をいただきたいと思いますが、
 >Sheet1への出力ではなく、Sheet2を新規に追加する仕組みではいけませんか?
 
 とりあえず、Sheet1を作業用シートにコピー(シートのコピー)して、作業用シート上で変形処理をして、結果をSheet2へコピーしたのち、必要に応じて罫線処理させるようにしてみました。
 これであれば、前回の応用ということになります。
 
 なお、「行列が任意」については、A1を含む空白行、空白列で囲まれたセル範囲になっていますので、A1がその範囲に含まれているという制約だけになります。
 
 Sub Macro1()
 Dim MaxRow As Long, MaxColumn As Integer, MaxColumnStart As Integer
 Dim RowNo As Long, ColumnNo As Integer
 
 '作業用シートにコピー '★
 Sheets("Sheet1").Copy After:=Sheets("Sheet1") '★
 '変形前の最終列を取得
 '表の途中に空白行、空白列がないことが前提
 MaxColumn = Range("A1").CurrentRegion.Columns.Count
 MaxColumnStart = MaxColumn
 '最終列をカンマ区切りで分割
 Columns(MaxColumn).Select
 Selection.TextToColumns Destination:=Cells(1, MaxColumn), DataType:=xlDelimited, _
 TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
 Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
 :=Array(1, 1), TrailingMinusNumbers:=True
 '変形後の表の大きさを取得
 MaxColumn = Range("A1").CurrentRegion.Columns.Count
 MaxRow = Range("A1").CurrentRegion.Rows.Count
 '変形処理(列方向へ挿入したセルを行方向へ展開)
 RowNo = 2
 Do Until RowNo > MaxRow
 For ColumnNo = 3 To MaxColumn
 If Cells(RowNo, ColumnNo).Value <> "" Then
 If ColumnNo > 3 Then
 Rows(RowNo).Copy
 Rows(RowNo + 1).Insert Shift:=xlDown
 RowNo = RowNo + 1
 MaxRow = MaxRow + 1
 Application.CutCopyMode = False
 Cells(RowNo - 1, ColumnNo).Copy Destination:=Cells(RowNo, 3)
 End If
 Else
 Exit For
 End If
 Next
 RowNo = RowNo + 1
 Loop
 '列方向へ挿入した列全体を削除
 Range(Columns(4), Columns(MaxColumn)).Delete Shift:=xlToLeft
 '作業シートからSheet2へコピーする。コピーしたら作業シートを削除 '★
 Range("A1").CurrentRegion.Copy Destination:=Sheets("Sheet2").Range("A1") '★
 Application.DisplayAlerts = False '★
 ActiveSheet.Delete '★
 Application.DisplayAlerts = True '★
 Sheets("Sheet2").Select '★
 Range("A1").Select
 
 '罫線処理が必要であれば、ここから記述
 '変形後の表全体の罫線処理(マクロの記録により記述)
 Range("A1").CurrentRegion.Select
 '〜以下省略 以下のURLに掲載のコードを参照〜
 'http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=17548;id=excel
 End Sub
 
 |  |