- ベストアンサー
VBAを使用してデータの整理を行う方法
- VBAを使用してデータの整理を行いたい場合、縦に並んでいる元データを番号ごとに横に並べることができます。
- 元データのカタカナ(+数字)ごとに詳細データがありますが、数や内容が異なるため、全体を把握しにくいことがあります。
- それぞれの番号に対応する詳細データを横に並べる方法や、特定の条件に合わせて番号を入力する方法など、VBAを使ったデータ整理の方法があります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
F1: ◆ G1: あ H1: ▲ は必ず入れて実行して下さい。 Option Explicit ' Sub Macro1() Dim ROut As Long Dim RSta As Long Dim COut As Integer Dim RInp As Long Dim NowKey As String Dim OldKey As String Dim Match As Variant Dim Color As Long ' Color = vbWhite Cells.Interior.Pattern = xlNone Cells.UnMerge Range("F2:R" & Rows.Count).ClearContents ROut = 1 Application.ScreenUpdating = False ' For RInp = 2 To [A1].End(xlDown).Row NowKey = Cells(RInp, "A") & Cells(RInp, "B") ' If OldKey <> NowKey Then Color = Color Xor rgbPeachPuff Xor vbWhite [F1:R1].Offset(ROut).Interior.Color = Color [I1:J1].Offset(ROut) = Cells(RInp, "A").Resize(, 2).Value [Q1:R1].Offset(ROut) = Cells(RInp, "A").Resize(, 2).Value ROut = ROut + 1 RSta = ROut COut = 11 End If ' Match = Cells(RInp, "D") On Error Resume Next Match = WorksheetFunction.Match(Match, [F1:H1], 0) + 5 On Error GoTo 0 ' If Cells(RInp, "D") = "" Then ElseIf Val(Match) > 0 Then Cells(ROut, Match) = NowKey Else Cells(ROut, COut).Resize(, 2) = Cells(RInp, "C").Resize(, 2).Value COut = COut + 2 ' If COut = 17 Then [F1:R1].Offset(ROut).Interior.Color = Color ROut = ROut + 1 ' For COut = 6 To 9 Cells(RSta, COut).Resize(ROut - RSta + 1).Merge Next COut ' For COut = 17 To 18 Cells(RSta, COut).Resize(ROut - RSta + 1).Merge Next COut COut = 11 End If End If OldKey = NowKey Next RInp End Sub
お礼
ありがとうございます。 サンプルのものではできました。 実際に使いたいのが、もう少し複雑な文字列で(それが原因なのかもわからないのですが) アレンジしたらできなくなってしまい、困っています。 また教えていただけませんでしょうか。 よろしくお願いいたします。