非常に古いマシンを使用している場合や、大量の行を含む XL2007 ワークシートを使用している場合を除き、ループは十分に高速です。本音!
私を信用しない?これを見てください。これを使用して、100万行の範囲をランダムな文字で埋めました:
=CHAR(RANDBETWEEN(65,90))
次に、この関数を作成し、Control-Shift-Enter を使用して 26 セルの範囲から呼び出しました。
=TRANSPOSE(UniqueChars(A1:A1000000))
これは、私が数分でハッキングした、あまり最適化されていない VBA 関数です。
Option Explicit
Public Function UniqueChars(rng As Range)
Dim dict As New Dictionary
Dim vals
Dim row As Long
Dim started As Single
started = Timer
vals = rng.Value2
For row = LBound(vals, 1) To UBound(vals, 1)
If dict.Exists(vals(row, 1)) Then
Else
dict.Add vals(row, 1), vals(row, 1)
End If
Next
UniqueChars = dict.Items
Debug.Print Timer - started
End Function
私の 1 年前の Core 2 Duo T7300 (2GHz) ラップトップでは、0.58 秒かかりました。