我一直在尝试通过使用 XLL 来加速宏,但是,使用 UDF 似乎比使用 XLL 快得多。
一些带有代码分析的数据证明了这一点
子 Proc 的XLL时间:模块 1 迭代11.64831 秒
子 Proc 的UDF时间:模块 1 迭代4.25986 秒
它发生在我转换的两个 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 速度较慢。