XLL を使用してマクロを高速化しようとしてきましたが、XLL よりも UDF の方がはるかに高速です。
コード プロファイリングを含む一部のデータがそれを示しています
サブ Proc:module 1 反復のXLL時間11.64831 秒
サブ Proc:module 1 反復のUDF時間4.25986 秒
これは、変換した 2 つの UDF で発生し、ファクターは約 2 倍または 3 倍遅くなります。たとえば、このための XLL 関数は次のとおりです。
[ExcelFunction(Description="Joins cell values", Category="Example1")]
public static object RangeJoin(object[,] cells)
{
List<string> list = new List<string>();
foreach (object o in cells){
if ( !(o is ExcelEmpty) )
list.Add(o.ToString()); }
return string.Join(" ", list.ToArray());
}
UDF関数は
Function RangeJoin(Rng As Range) As String
Dim vArr As Variant
Dim v As Variant
vArr = Rng
RangeJoin = vbNullString
For Each v In vArr
RangeJoin = RangeJoin & " " & v
Next v
End Function
両方とも、データとセル間の空白を使用して Range(A1:A701) に対してテストされました。どちらも期待どおりに機能しますが、XLL の方が遅いだけです。