至于问题,我需要能够将Variant数组A中的所有数据与Variant数组B中的所有数据进行比较。我知道我需要某种双循环(以便根据所有B值检查每个A值) ),但我无法弄清楚该怎么做。这是我到目前为止所做的:
Sub Button_Click()
Dim trgtRange As Variant
Dim tempRange As Variant
Set myRange = ThisWorkbook.Sheets(1).Range("L:L")
For Each cell In myRange
If IsEmpty(cell) Then
ActiveCell.Offset(-1, 0).Select
currentRow = ActiveCell.Row
Set trgtRange = Range("L2:L" & currentRow)
Exit For
End If
Next cell
Set tempRange = Range("A1:A" & currentRow - 1)
' Insert a double loop here
End Sub
所以,trgtRange
是变体A而tempRange
是变体B.我知道我可以将变体B设置得更容易一点,但我已经这样做了。毕竟,代码应该作为最后的操作抛光。
您可能想知道为什么变体A和B完全相同。那么,那是因为我需要对它们进行比较,以便找到彼此接近的值(即10000和12000),并且我需要对它进行某种容忍。
答案 0 :(得分:1)
这是我的答案。你为什么需要两个循环才能做到这一点。一些相对寻址很好地解决了这个问题。像这样设置一个电子表格,例如:
您的代码就是这个
Sub Button_Click()
Dim dblTolerance As Double
Dim tmp As Range
'Get source range
Set tmp = ActiveSheet.Range("A2")
'Get tolerance from sheet or change this to an assignment to hard code it
dblTolerance = ActiveSheet.Range("D13")
'use the temporary variable to cycle through the first array
Do Until tmp.Value = ""
'Use absolute function to determine if you are within tolerance and if so put match in the column
'NOTE: Adjust the column offset (set to 4 here) to match whichever column you want result in
If Abs(tmp.Value - tmp.Offset(0, 2).Value) < dblTolerance Then
tmp.Offset(0, 4).Value = "Match"
Else
tmp.Offset(0, 4).Value = "No Match"
End If
'Go to the next row
Set tmp = tmp.Offset(1, 0)
Loop
'Clean up
Set tmp = Nothing
End Sub
代码中的注释解释了它的工作原理。这优于双循环,因为相对引用更快,内存使用更有效,并且您只需要在每行进行一次传递。
如果出于某种原因需要使用双循环让我知道,但这种方法的性能较差。希望这会有所帮助。