質問のExcelの問題をVBAでやってみました。(^_^;
「.NET Framework」のArrayListクラスを使って、Unique()関数もどきを作ってみました。(^_^;
3番目の参考URLをベースにして、5番目の参考URLから、sort付きのArrayList版に変形してみました。
Function mUnique(ary As Variant) As Variant Dim aryList As Object '// ArrayList '// .NET FrameworkのArrayListクラスを利用する Set aryList = CreateObject("System.Collections.ArrayList") '// 配列をArrayListに重複なくコピー Dim a As Variant For Each a In ary If Not aryList.contains(a) Then aryList.Add (a) End If Next '// 並べ替え Call aryList.Sort '// 配列に再格納 mUnique = aryList.ToArray Set aryList = Nothing End Function Sub macro1() Dim rng1 As Range: Set rng1 = Range("A3:A19") Dim rng2 As Range: Set rng2 = Range("B3:B19") Dim rng3 As Range: Set rng3 = Range("C3:C19") Dim uqAry1: uqAry1 = mUnique(rng1.Value) Dim cnt1 As Integer: cnt1 = UBound(uqAry1) - LBound(uqAry1) + 1 Dim uqAry2: uqAry2 = mUnique(rng2.Value) Dim cnt2 As Integer: cnt2 = UBound(uqAry2) - LBound(uqAry2) + 1 Dim i, j As Integer j = 0 For i = 6 To 6 + cnt1 - 1 Cells(2, i).Value = uqAry1(j) j = j + 1 Next i j = 0 For i = 3 To 3 + cnt2 - 1 Cells(i, "E").Value = uqAry2(j) j = j + 1 Next i For i = 6 To 6 + cnt1 - 1 For j = 3 To 3 + cnt2 - 1 Cells(j, i).Value = WorksheetFunction.SumIfs(rng3, rng1, Cells(2, i).Value, rng2, Cells(j, "E").Value) Next j Next i For j = 3 To 3 + cnt2 - 1 Cells(j, "L").Value = WorksheetFunction.SumIfs(rng3, rng2, Cells(j, "E").Value) Next j End Sub
※参考URL
●Excelの表データから各月毎の集計表を作成したいです - 人力検索はてな
●UNIQUE関数で重複しない値を取り出す:Excel関数
●VBAで重複のない配列(ユニーク,一意の配列)を作成する関数 - Qiita
●Office TANAKA - Excel VBA Tips[重複しないリストを作る(1)]
●VBAの配列を.NETのArrayListのSortで並べ替え | Excel作業をVBAで効率化