我正在使用以下函数来查找两个单元格的值是否在两列中。
我必须将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
答案 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
然后将您的twoCells
和twoCols
更改为twoCellsArr
和twoColsArr
。
如果您的twoCols
不变,并且您要进行重复比较,建议您使用Dictionary
将twoCols.Value
存储为键,将行号存储为值,然后执行查找并比较它们是否在同一行。