• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ワープロのように作成されたエクセルデータの変換方法)

ワープロのように作成されたエクセルデータの変換方法

このQ&Aのポイント
  • エクセルデータをワープロのように作成された形式から独立した行に変換する方法を教えてください。
  • 元のデータは改行で複数のデータが1セルに入力されており、試験の種類も表示したいです。
  • データの変換方法や選択内容毎に別行にする方法についてアドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

別のシートにマクロで写すことを考えました。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

mee2001
質問者

お礼

Wendy02様 アドバイスありがとうございました。 まだ自分には使いこなせるレベルにはありませんが、 頂いた内容を読み解きながらこの機会にじっくり取り組んでいきます。 具体的な解決方法をご教示頂いたのでベストアンサーにさせていただきます。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.1

自分用なら…作り直せばOK。 あれこれ考えるよりも、その場で作り直したほうが早く終わります。 別の Sheet にコピーしてそこで編集しましょう。

mee2001
質問者

お礼

Cupper様 回答ありがとうございます。 かなりの量で、また自分用の作業後、人にパスする資料なので・・・ 言葉が足りませんでした。 定期的に必要な作業なので頑張って効率アップさせたいと思います。

すると、全ての回答が全文表示されます。

関連するQ&A