| 
    
     |  | ▼マリモ さん: 
 こんにちは
 
 配列へのセットの部分は、ループさせてコードをコンパクトにすることもできますが
 これぐらいなら、むしろ、ベタな記述のほうがわかりやすいとおもうので以下。
 
 Sub Sample()
 Dim v() As Variant
 Dim k As Long
 Dim c As Range
 
 With Sheets("Sheet1")
 ReDim v(1 To .Rows.Count, 1 To 4)  '転記用配列
 'A2からA列のセルを1つずつ抽出
 For Each c In .Range("A2", .Range("A" & .Rows.Count).End(xlUp))
 k = k + 1
 v(k, 1) = c.Value
 v(k, 2) = .Range("B1").Value
 v(k, 3) = c.Offset(, 1).Value
 v(k, 4) = c.Offset(, 2).Value
 k = k + 1
 v(k, 1) = c.Value
 v(k, 2) = .Range("D1").Value
 v(k, 3) = c.Offset(, 3).Value
 v(k, 4) = c.Offset(, 4).Value
 k = k + 1
 v(k, 1) = c.Value
 v(k, 2) = .Range("F1").Value
 v(k, 3) = c.Offset(, 5).Value
 v(k, 4) = c.Offset(, 6).Value
 Next
 
 .Cells.ClearContents
 .Range("A1:D1").Value = Array("町名", "産業", "事業所", "従業員") '新しいタイトル行
 .Range("A2").Resize(k, UBound(v, 2)).Value = v
 End With
 
 MsgBox "作成完了"
 
 End Sub
 
 |  |