- ベストアンサー
【Excel】データの並び替えがうまくできない!キーごとにグルーピングする方法を教えてください
- Excelでデータの並び替えがうまくできず悩んでいます。キーごとにグルーピングして、さらに縦→横に並べたい方法を教えてください。
- A列がキーになっているデータをキーごとにグルーピングし、縦→横に並べる方法を教えてください。
- Excelでデータの並び替えがうまくできない問題について、キーごとにグルーピングして縦→横に並べる方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
dictionary(最近の回答はこればっかりですが...)の使用例です。連想配列という立派な名前がある事を最近知りました。今日は出先の、Excell2007環境で作成しておりますが、動作いたしました。 追加の情報は、VBA dictionaryで検索すると、結構ヒットすると思います。 Sub test() Dim targetRange As Range, destRange As Range Dim myDic As Object, myKey As Variant Dim i As Long, j As Long Dim keyString As String Dim area As Range Dim myCell As Range Set targetRange = ActiveSheet.Range("A1").CurrentRegion Set myDic = CreateObject("Scripting.Dictionary") For i = 1 To targetRange.Rows.Count keyString = targetRange.Cells(i, 1).Value If Not myDic.exists(keyString) Then myDic.Add keyString, targetRange.Cells(i, 2) Else Set myDic.Item(keyString) = Union(myDic.Item(keyString), targetRange.Cells(i, 2)) End If Next i myKey = myDic.keys Set destRange = ActiveSheet.Range("F1") For i = 0 To myDic.Count - 1 j = 1 For Each area In myDic(myKey(i)) For Each myCell In area.Cells destRange.Value = myKey(i) destRange.Offset(0, j).Value = myCell.Value j = j + 1 Next Next area Set destRange = destRange.Offset(1, 0) Next i Set myDic = Nothing End Sub
その他の回答 (1)
- mitarashi
- ベストアンサー率59% (574/965)
ANo.1です。最後の方のループが変でしたので、差し替え願います。(同じ見出しを何度も上書きしていた) For i = 0 To myDic.Count - 1 j = 1 destRange.Value = myKey(i) For Each area In myDic(myKey(i)) For Each myCell In area.Cells destRange.Offset(0, j).Value = myCell.Value j = j + 1 Next Next area Set destRange = destRange.Offset(1, 0) Next i
お礼
再び回答くださったループ処理部分を差し替えて、試させていただきました。 朝早くから外出しているのに、mitarashi様のほうで動作も確認してくださって、 本当にありがとうございました☆
お礼
mitarashi様、こんにちは。 すごーいっ、一発で出来ました! まさに期待したとおりの動きです。 Excelは使わない日はないのに、ちょっと難しいことにぶつかると、途端にできなくなってしまいます。 キー数が不特定なので、ループを使わないといけないのかな、 ということは、Excel関数の組み合わせでは実現できないのかな、と薄々思っていましたが、 VBAも勉強しないと、とあらためて思いました。 本当に助かります。 ありがとうございました☆