| 
    
     |  | どんたく さん、おはようございます。 
 >つまりこのリスト内に何種類の固体があって、それが何回出現しているのか
 >求めたい。
 >関数でもマクロでもいいんだが、できるだけスマートな方法を知りたい。
 >なにか定番みたいなものはあるんでしょうか ???
 
 フィルタ機能のマクロを記録し、ちょっと編集しました。
 
 Sub Macro1()
 Dim r1 As Range, r2 As Range, Rmax As Long
 'A1は見出し、データはA2:A21まで入っているとして
 Set r1 = Range("A1:A21")
 '集計先はB1
 Set r2 = Cells(1, 2)
 r1.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=r2, Unique:=True
 '生成したリストの最下行
 Rmax = r2.End(xlDown).Row
 With r2.Offset(1, 1)
 'C2に式を入れる
 .Formula = "=COUNTIF(" & r1.Address & "," & .Offset(0, -1).Address(False, True) & ")"
 'それを下にフィル
 Range(.Offset(0, 0), Cells(Rmax, .Column)).FillDown
 End With
 '
 Set r1 = Nothing: Set r2 = Nothing
 End Sub
 
 こんな感じです。
 
 |  |