- ベストアンサー
Excelで1列に複数データ固まりを分ける方法
- Excelで1列に複数のデータ固まりがある場合、列に展開する方法を紹介します。
- 1000行以上ある場合でも、簡単に振り分けることができます。
- これにより、データの整理や分析が円滑に行えます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! マクロになってしまいますが・・・ 「データのかたまり」の個数(Sheet1のA列の空白数)に規則性がなく、 「データの名前」も「L」「R」だけでなく、他の名前もあるとしての一例です。 ↓の画像のようにSheet1のデータをSheet2に表示するようにしてみました。 Alt+F11キー → 画面左側の「This Workbook」をダブルクリック → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i, j, k As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") Application.ScreenUpdating = False ws2.Cells(1, 1) = ws1.Cells(1, 1) j = ws2.Cells(1, Columns.Count).End(xlToLeft).Column If j > 1 Then Range(ws2.Cells(1, 2), ws2.Cells(1, j)).ClearContents End If ws2.Columns(1).Insert For i = 2 To ws1.Cells(Rows.Count, 2).End(xlUp).Row If ws1.Cells(i, 1) <> "" Then ws2.Cells(i, 1) = ws1.Cells(i, 1) Else ws2.Cells(i, 1) = ws2.Cells(i - 1, 1) End If If WorksheetFunction.CountIf(ws2.Columns(2), ws1.Cells(i, 1)) = 0 Then ws2.Cells(Rows.Count, 2).End(xlUp).Offset(1) = ws1.Cells(i, 1) End If If WorksheetFunction.CountIf(ws2.Rows(1), ws1.Cells(i, 2)) = 0 Then ws2.Cells(1, Columns.Count).End(xlToLeft).Offset(, 1) = ws1.Cells(i, 2) End If Next i For k = 2 To ws2.Cells(Rows.Count, 2).End(xlUp).Row For i = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row For j = 3 To ws2.Cells(1, Columns.Count).End(xlToLeft).Column If ws2.Cells(i, 1) = ws2.Cells(k, 2) And ws1.Cells(i, 2) = ws2.Cells(1, j) Then ws2.Cells(k, j) = ws1.Cells(i, 3) End If Next j Next i Next k ws2.Columns(1).Delete Application.ScreenUpdating = True End Sub 'この行まで 上記マクロを実行すると画像のような感じになります。 ※ 関数でないので、Sheet1のデータ変更があってもSheet2に反映されません。 ※ Sheet1のデータ変更があるたびにマクロを実行する必要があります。 参考になりますかね?m(_ _)m
お礼
回答ありがとうございます。 簡単そうで簡単に処理できないので、マクロでないと無理と思いました。 参考にやってみます。