使用带表和循环的数组

时间:2017-10-04 06:59:52

标签: arrays excel vba excel-vba for-loop

如果已经提出这样的问题,我很抱歉,我找不到我需要的答案,而且我对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个之间匹配。但我想我会把它拿出来让它更清晰

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果要有效地定义范围,可以使用第一个和最后一个列和行地址并创建范围对象。 请参阅此处的示例:Dynamic ranges

然后你可以这样做: 范围(myRange).SpecialCells(xlCellTypeBlanks).FormulaR1C1 =&#34; LongFormula&#34; 它可以用你的公式有效地替换所有空白细胞,而不需要做所有的循环。

将这些步骤与评论中提到的项目相结合,例如避免.select。

要点:

避免使用.select

在处理对象时尽可能使用WITH

获取第一个单元格地址和最后一个单元格地址并创建范围对象

使用特殊单元格方法将此范围内的空白设置为公式。