【发布时间】:2016-10-17 23:42:33
【问题描述】:
我有一列全名,我想用首字母代替。
我目前正在这样做:
Dim n As Long
Dim varray As Variant
Dim FullNameRange As Range
Dim FullName As String
varray = Range(NDLstaffCol & FirstLineItemRow & ":" & staffCol & LastRow + 1)
For n = FirstLineItemRow To UBound(varray, 1)
Set FullNameRange = ActiveSheet.Range(staffCol & n)
FullName = FullNameRange.Value
FullNameRange = Left(FullName, 1) & Mid$(FullName, InStr(FullName, " ") + 1, 1)
Next
其中LastRow 将最后一条记录称为全局变量。
与同一模块中的其他子例程相比,这需要较长的处理时间。
有更好的方法吗?
作为参考,我从来不知道全名,所以硬编码的查找/替换不起作用。有
【问题讨论】:
-
对我来说看起来不错,它的运行时复杂度为
O(n),无法改进(至少在这个宇宙中)。您是否尝试过在调试器之外运行?它在调试模式下和正常运行一样慢吗?您是否尝试过使用 .NET Office SDK 在 C#/.NET 中重写它?如果在运行 Excel 时将其最小化,它会运行得更快吗?您使用的是哪个版本的 Excel? -
@Dai 在“live”时正常运行缓慢。我使用进度条(用户窗体)向用户显示他们在子程序中的位置,当我到达本节时,它需要很长时间。没听说过重写和使用 SDK。最小化不会影响时间。 Excel 2016。如果这真的是最好的方法,那么我很高兴我只有