3

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 の方が遅いだけです。

4

1 に答える 1