Arrays 使用带有表和循环的数组
我很抱歉,如果已经有人问过这类问题,我找不到我需要的答案,而且我对VBA很陌生 我试图通过在两个工作簿之间移动的索引匹配,将一些值从一个表匹配到另一个表。为了正确地执行此操作,我使用了两个循环。但是当我的代码只有几千行时,它的速度非常慢。我可以用数组或其他东西来改进它吗Arrays 使用带有表和循环的数组,arrays,vba,excel,for-loop,Arrays,Vba,Excel,For Loop,我很抱歉,如果已经有人问过这类问题,我找不到我需要的答案,而且我对VBA很陌生 我试图通过在两个工作簿之间移动的索引匹配,将一些值从一个表匹配到另一个表。为了正确地执行此操作,我使用了两个循环。但是当我的代码只有几千行时,它的速度非常慢。我可以用数组或其他东西来改进它吗 Dim mainWB As Workbook Dim mainWS As Worksheet Set mainWB = ActiveWorkbook Set mainWS = mainWB.Sheets(1) Dim Ro
Dim mainWB As Workbook
Dim mainWS As Worksheet
Set mainWB = ActiveWorkbook
Set mainWS = mainWB.Sheets(1)
Dim RowsToProcess As Long
RowsToProcess = mainWS.Range("C" & Rows.Count).End(xlUp).Row
Dim lastCol As Long
lastCol = mainWS.Cells(10, Columns.Count).End(xlToLeft).Column
Range(Cells(11, 8), Cells(RowsToProcess, lastCol)).Select
Selection.NumberFormat = "General"
For i = 1 To lastCol
For a = 1 To RowsToProcess
If Workbooks("template.xls").Sheets("#").Cells(10 + a, 7 + i).Value <> vbNullString Then
Cells(10 + a, 7 + i).Select
ActiveCell.FormulaR1C1 = _
"= "Long Formula" "
End If
Next
Next
我的长公式。它基本上是做2个IndexMatch。在这本手册和另外两本手册之间,但我想我会把它拿出来让它更清晰
非常感谢你的帮助 如果要有效地定义范围,可以使用第一列和最后一列以及行地址并创建范围对象。 请参见此处的示例: 然后,您可以执行以下操作: RangemyRange.SpecialCellsxlCellTypeBlanks.FormulaR1C1=LongFormula 它可以有效地用公式替换所有空白单元格,而无需执行所有循环 将这些步骤与注释中提到的项目结合起来,例如避免。选择 总结: 避免使用。选择 在处理对象时尽可能与一起使用 获取第一个单元格地址和最后一个单元格地址,并创建范围对象
使用“特殊单元格”方法在公式中设置此范围内的空格。第一件事是您应该删除。选择“这是一种非常糟糕的做法,并且总是会降低代码的速度。”。有许多教程介绍如何避免使用。选择。也请考虑并考虑在您的代码开始切换到手动计算模式,最后切换到自动,参见避免。选择例如CysS10+A,7 +I.选择ActueCel.Frimule1C1可以编写为CysS10+A,7 + I.公式1C1。另外,在处理对象时使用With语句,例如不使用。select I从166处理时间下降到41秒,然后是26秒,使用手动计算,谢谢!这已经起到了很大的作用,但是.SpecialCellsxlCellTypeBlanks对我来说不起作用,因为工作表是受保护的。并使用RangemyRange.FormulaR1C1=。。。如果没有特殊的电池,结果比我的两个循环还要慢。我做错了什么吗?使用.SpecialCells方法得到了什么错误消息?运行时错误1004:您不能在受保护的工作表上使用此命令。[…]1你知道这张表的密码吗?2你想用长公式达到什么目的?您是否可以提供示例输入和预期输出?不,我没有密码。公式是从另一个表索引匹配中获取某些内容,然后在第一个单词是单词的情况下,将其转换为第三个表索引匹配。