| 
    
     |  | KEI さん、おはようございます。 
 >縦3列に並んだデータを、行列変換して、違うシートに一列に任意の空白を空けて、並べたいと考えています。
 >ABC
 >ABC  ⇒ AAAA(任意の空白)BBBB(任意の空白)CCCC
 >ABC
 >ABC
 >今まではシートの中にある一列のデータを全て選択して、行列変換して貼り付けていたので、以下のコードで問題ありませんでした。
 
 ROW("A")もエラーになりそうなものですが。
 
 列全体選択時の行数 > シート上の列数
 XP:  65536行 >  256列
 2007:1048576行 > 16384列
 
 なので列全体でコピーして回転すると範囲外にも貼り付けることになるので”コピー領域と貼り付け領域の形が違う”エラーになります
 
 Sub test()
 Dim ws(1 To 2) As Worksheet, r1 As Range
 Dim CC As Long, Cpos As Long, Rpos As Long, NN As Long
 '対象はこのブック
 With ThisWorkbook
 Set ws(1) = .Worksheets("Sheet1") 'コピー元
 Set ws(2) = .Worksheets("Sheet2") 'コピー先
 End With
 '念のためクリア
 ws(2).Cells.ClearContents
 '貼り付け先情報
 Rpos = 1 '貼り付け先行番号
 Cpos = 1 '最初の貼り付け先列番号
 NN = 2 '任意の空白
 '開始
 For CC = 1 To 3
 'コピー元シートの処理
 'データの入っている範囲をセット
 With ws(1)
 Set r1 = .Range(.Cells(1, CC), .Cells(.Rows.Count, CC).End(xlUp))
 End With
 'ペースト先シートの処理
 With ws(2)
 If Cpos + r1.Count > .Columns.Count Then
 MsgBox vbCrLf & Cpos + r1.Count & " > " & ws(2).Columns.Count, _
 vbExclamation, "Error" '列数オーバーで中断
 Else
 'コピペ
 r1.Copy
 .Cells(Rpos, Cpos).PasteSpecial Transpose:=True
 Application.CutCopyMode = False
 '次の貼り付け先
 Cpos = Cpos + r1.Count + NN
 End If
 End With
 Next
 '終了
 Set r1 = Nothing
 Erase ws
 End Sub
 
 こんな感じです。
 
 |  |