別のシートにマクロで写すことを考えました。Sheet2 と Sheet3 に、それぞれ分割されて貼り付けられます。しかし、「今考えている方法は……」の部分の文章が、要望なのか、思考過程なのか分かりません。ただ、違う種類の表が出てきた以上Test2()では作りましたが、
>数学(改行)物理
この部分が必ずしも、二つとは限らないわけですから、表の列が揃わなくなります。したがって、項目名はSh2 にはいれません。マクロ否定なら無視してください。
'//
Sub Test1()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim ar As Variant, c As Variant
Dim i As Long, j As Long, col As Long
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
With sh1
col = .Cells(1, Columns.Count).End(xlToLeft).Column
If sh2.Cells(1, 1).Value = "" Then .Cells(1, 1).Resize(, col).Copy sh2.Cells(1, 1)
i = sh2.Cells(Rows.Count, 1).End(xlUp).Row + 1
Application.ScreenUpdating = False
For Each c In .Range("B2", .Cells(Rows.Count, 2).End(xlUp))
If c.Value <> "" Then
ar = Split(c.Value, vbLf)
For j = 0 To UBound(ar)
sh2.Cells(i, 1).Resize(, col).Value = c.EntireRow.Resize(, col).Value
sh2.Cells(i, 2).Value = ar(j)
i = i + 1
Next
End If
Next
Application.ScreenUpdating = True
End With
End Sub
'//
Sub Test2()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim ar As Variant, ar2 As Variant, c As Variant
Dim i As Long, j As Long, k As Long, t As Long
Dim col As Long
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet3")
With sh1
col = .Cells(1, Columns.Count).End(xlToLeft).Column
i = sh2.Cells(Rows.Count, 1).End(xlUp).Row + 1
ar2 = Application.Index(.Range("C1", .Cells(1, col)).Value, 1, 0)
Application.ScreenUpdating = False
For Each c In .Range("B2", .Cells(Rows.Count, 2).End(xlUp))
If c.Value <> "" Then
ar = Split(c.Value, vbLf)
sh2.Cells(i, 1).Value = c.Offset(, -1).Value
For j = 0 To UBound(ar)
sh2.Cells(i, 2 + j).Value = ar(j)
Next
sh2.Cells(i, 3 + UBound(ar)).Resize(, col - 1).Value = c.Offset(, 1).Resize(, col - 1).Value
For k = LBound(ar2) To UBound(ar2)
t = LBound(ar)
sh2.Cells(i, 3 + k + t) = ar2(k) & " " & sh2.Cells(i, 3 + k + t)
Next
i = i + 1
End If
Next
Application.ScreenUpdating = True
End With
End Sub
お礼
Wendy02様 アドバイスありがとうございました。 まだ自分には使いこなせるレベルにはありませんが、 頂いた内容を読み解きながらこの機会にじっくり取り組んでいきます。 具体的な解決方法をご教示頂いたのでベストアンサーにさせていただきます。