使用CopyFromRecordSet时修剪空格

我有一个电子表格,我正在尝试优化。

我必须从列中获取每个值,然后从SQL服务器获取3个“相应”值,就像之前完成的那样,每个列值导致1个SQL查找,所以只需要更新单个表,调用了75.000个sql请求。 (7.5小时)

然后,我重写了它,只做一个SQL调用,并获取整个表到“本地”logging集,并比较每个列值与logging集,并写入相应的列(50分钟)

为了进一步改进,我创build了一个本地logging集

Set rs = New ADODB.Recordset With rs.Fields .Append "registreringsnr", adChar, 50 .Append "security_type", adChar, 50 .Append "security_group", adChar, 128 End With 

将每个列值与SQL的logging集进行比较,然后将值添加到我的“rs”logging集中,当我完成时,我执行:

 CopyFromRecordSet rs 

问题是rs中的字段长度是固定的,所以如果“registreringsnr”是2个字符,那么它会附加48个空格。

有没有办法删除空白,而不必循环通过3列25,000单元格,并删除WhiteSpaces?

用下面的代码填充3 x 25000单元格的范围( 仅用于testing目的

 Sub Fill() Application.ScreenUpdating = False Dim i As Long, j As Long For i = 1 To 25000 For j = 1 To 3 Cells(i, j) = Chr(32) & Chr(32) & Chr(32) & Int((50 - 0 + 1) * Rnd + 0) & _ Chr(32) & Chr(32) & Chr(32) Next j Next i Application.ScreenUpdating = True End Sub 

并运行

 Sub Trimming() Application.ScreenUpdating = False Dim stNow As Date stNow = Now Dim i As Long, j As Long For i = 1 To 25000 For j = 1 To 3 Cells(i, j) = Trim(Cells(i, j)) Next j Next i Debug.Print DateDiff("s", stNow, Now) Application.ScreenUpdating = True End Sub 

75000 2秒来处理75000细胞(100%细胞需要修剪)。

所以我不知道为什么你仍然在寻找一种替代方法来直接在logging集中修剪它。

你可以坚持所有的数组,但这可能是一个矫枉过正,如果上述只需要约。 2秒。

arrays在我的机器上花费的时间不到一秒钟

 Sub TrimminArr() Application.ScreenUpdating = False Dim stNow As Date stNow = Now Dim arr As Variant arr = Range("A1:C25000") Dim i As Long, j as long For i = LBound(arr, 1) To UBound(arr, 1) For j = LBound(arr, 2) To UBound(arr, 2) arr(i, j) = Trim(arr(i, j)) Next j Next i Range("A1:C25000").ClearContents Range("A1").Resize(UBound(arr, 1), UBound(arr, 2)) = arr Debug.Print DateDiff("s", stNow, Now) Application.ScreenUpdating = True End Sub