こんばんは!
VBAになってしまいますが・・・
一例です。
二つのマクロにしてみました。
Alt+F11キー → 画面左下の「This Workbook」をダブルクリック → VBE画面に
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)
test1が「行Aを元に・・・」の方のマクロで、test2が「列3を元に・・・」のマクロになります。
Sub test1() 'この行から
Dim i, k As Long
Dim str As String
Dim ws1, ws2 As Worksheet
Set ws1 = Worksheets("元入力")
Set ws2 = Worksheets("行Aを元に振り分け")
k = ws2.Cells(Rows.Count, 1).End(xlUp).Row
If k > 1 Then
Range(ws2.Cells(2, 1), ws2.Cells(k, 2)).ClearContents
End If
For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row
If WorksheetFunction.CountIf(ws2.Columns(1), ws1.Cells(i, 1)) = 0 Then
ws2.Cells(Rows.Count, 1).End(xlUp).Offset(1) = ws1.Cells(i, 1)
End If
Next i
For k = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row
If ws1.Cells(i, 1) = ws2.Cells(k, 1) Then
str = str & vbCrLf & ws1.Cells(i, 2)
End If
Next i
ws2.Cells(k, 2) = WorksheetFunction.Substitute(str, vbCrLf, "", 1)
str = ""
Next k
ws2.Columns("A:B").HorizontalAlignment = xlCenter
End Sub
Sub test2()
Dim i, j, k As Long
Dim ws1, ws3 As Worksheet
Set ws1 = Worksheets("元入力")
Set ws3 = Worksheets("列3を元に振り分け")
ws1.Cells.Copy Destination:=ws3.Cells(1, 1)
j = ws3.Cells(1, Columns.Count).End(xlToLeft).Column
ws3.Columns(1).Insert
ws3.Columns("D").Cut Destination:=ws3.Cells(1, 1)
ws3.Columns("D").Delete
Range(ws3.Columns("A"), ws3.Columns(j)).Sort key1:= _
ws3.Cells(1, 1), order1:=xlAscending
End Sub 'この行まで
※ test2の方は自信がありません。
質問では
>列3を一番右に持ってきて
とありますが、一番左になるようにしています。
そして、単に列の並び替えと元データのC列の昇順に並び替えだけにしています。
※ おそらく質問用のデータだと思いますので、元データのC列の昇順に並び替えにしています。
ひらがなの並び替えは50音順になりますので、本当に「いろは・・・」であれば
「い・は・ろ・・・」の順になります。
的外れならごめんなさいね。m(_ _)m
お礼
早速回答いただきありがとうございます。 アドバイス通り、変更したら思ったものになりました。 勉強になりました。ありがとうございました!