如果已经提出这样的问题,我很抱歉,我找不到我需要的答案,而且我对VBA很新。
我试图通过在2个工作簿之间移动的索引匹配来匹配一个表到另一个表的某些值。为了做到这一点,我使用了两个To To循环。但是我的代码在涉及几千行时非常慢。我可以用数组或其他东西来改进它吗?
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
我的Long公式。它基本上是做2索引(在本练习册和其他2个之间匹配。但我想我会把它拿出来让它更清晰
非常感谢您的帮助!
答案 0 :(得分:1)
如果要有效地定义范围,可以使用第一个和最后一个列和行地址并创建范围对象。 请参阅此处的示例:Dynamic ranges
然后你可以这样做: 范围(myRange).SpecialCells(xlCellTypeBlanks).FormulaR1C1 =&#34; LongFormula&#34; 它可以用你的公式有效地替换所有空白细胞,而不需要做所有的循环。
将这些步骤与评论中提到的项目相结合,例如避免.select。
要点:
避免使用.select
在处理对象时尽可能使用WITH
获取第一个单元格地址和最后一个单元格地址并创建范围对象
使用特殊单元格方法将此范围内的空白设置为公式。