VBAを少し必要とするソリューションをお勧めします。
この例では、サンプルデータはB2:C10にあります。E1を見出しセルのままにして、E2に次の数式を入力し、数式バー内でCtrl + Shift + Enterを押して配列数式を作成します。数式は中括弧で囲まれ、配列数式であることを示します。
=IFERROR(INDEX($B$2:$B$10, MATCH(0, COUNTIF(E$1:$E1, $B$2:$B$10), 0),1),"")
空白になるまでこれを下にドラッグします。これにより、B2:B10のグループから一意の値のリストが最初に作成されます。この数式を配置する場所はどこでも、少なくとも1つのセルが参照可能になっている必要があります。この場合のE1は、式がE2で始まるためです。
TEXTJOINと呼ばれる関数を使用します。ただし、Excelのほとんどのバージョンではこれは利用できません。Excel 2016のOffice 365バージョンを使用している場合に使用できます。使用できない場合は、VBAでUDF(ユーザー定義関数)を使用して同じ機能を複製します。
Alt + F11を押してVBAエディターにアクセスします。[挿入]メニューからモジュールを挿入します。次のUDFを入れます。
Function TEXTJOIN1(delimiter As String, ignore_empty As Boolean, ParamArray cell_ar() As Variant)
For Each cellrng In cell_ar
For Each cell In cellrng
If ignore_empty = False Then
result = result & cell & delimiter
Else
If cell <> "" Then
result = result & cell & delimiter
End If
End If
Next cell
Next cellrng
TEXTJOIN1 = Left(result, Len(result) - Len(delimiter))
End Function
Excelシートに戻り、この関数を数式のUDFとして使用します。F2で次の式を入力し、CTRL + SHIFT + ENTERを押して配列式を作成します。
=IFERROR(TEXTJOIN1(CHAR(10),TRUE,IF($B$2:$B$10=E2,$C$2:$C$10,"")),"")
目的の行までドラッグします。これは、Char(10)によって連結されたグループごとに名前のリストを作成しますが、正しい効果を確認するには、目的のセルでテキストの折り返しを有効にする必要があります。Excelの[セルの書式設定]オプションから手動で実行するか、以下の簡単なマクロを使用して実行できます。最初に範囲を指定するだけです。この例では、E2:F4です。
Alt + F11を押してVBAエディターにアクセスします。挿入メニューからモジュールを挿入し、次のコードを貼り付けます。これにより、Format1という名前のマクロが作成されます
サブフォーマット1()
Range("E2:F4").Select
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlTop
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
End Sub
Excelシートに戻るAlt + F8キーを押して、[マクロ]ダイアログボックスにアクセスし、Format1を実行します。
このソリューションを最後にテストし、問題が発生した場合はお知らせください。