VBA-在比较单元格时提高计算效率

时间:2018-09-04 07:22:18

标签: excel vba excel-vba

我正在使用以下函数来查找两个单元格的值是否在两列中。 我必须将250套两格电池与6500套两格电池进行比较。 Excel花了 30秒来计算结果。
我可以提高计算效率吗?

Public Function CompareWithTwoCells(twoCells As Range, twoCols As Range)
    Dim result As String
    result = "False"
    For n = 1 To twoCols.Rows.Count
        If twoCols(n, 1) = "" Then
            Exit For
        End If

        If twoCells(1, 1) = twoCols(n, 1) And twoCells(1, 2) = twoCols(n, 2) Then
            result = "True"
            Exit For
        End If
    Next
    CompareWithTwoCells = result
End Function

enter image description here

3 个答案:

答案 0 :(得分:0)

这是可能进行增强的第一步(注释中的解释):

Public Function CompareWithTwoCells(twoCells As Range, twoCols As Range)
    Dim cell As Range
    Dim firstVal As Variant, secondVal As Variant

    firstVal = twoCells(1, 1) ' store first cell value in a variable
    secondVal = twoCells(1, 2) ' store second cell value in a variable
    CompareWithTwoCells = "False"
    For Each cell In twoCols.Columns(1).SpecialCells(xlCellTypeConstants) ' loop through first column not empty values
        If firstVal = cell.Value2 Then ' check one column fisrt
            If secondVal = cell.Offset(, 1) Then ' check second column only if first columns check is true
                CompareWithTwoCells = "True"
                Exit For
            End If
        End If
    Next
End Function

进一步的重大改进将使用数组而不是范围

答案 1 :(得分:0)

是否有您不能仅使用MATCH=MATCH的原因? (假设twoCells是A1:B1,而twoCols是F1:G6500)

=IFERROR(MATCH(A1,$F$1:$F$6500,0)=MATCH(B1,$G$1:$G$6500,0),FALSE)

这在我的机器上几乎是即时的。

答案 2 :(得分:-1)

根据@Zac的建议,添加:

Dim twoCellsArr, twoColsArr
twoCellsArr = twoCells.Value2
twoColsArr = twoCols.Value2

然后将您的twoCellstwoCols更改为twoCellsArrtwoColsArr

如果您的twoCols不变,并且您要进行重复比较,建议您使用DictionarytwoCols.Value存储为键,将行号存储为值,然后执行查找并比较它们是否在同一行。