比较Excel VBA中的值
我试图比较单元格A1和B1,如果是真的,则用A1值填充单元格F1。但不管我的输入值是多少,如果条件变为真比较Excel VBA中的值,excel,comparison,vba,Excel,Comparison,Vba,我试图比较单元格A1和B1,如果是真的,则用A1值填充单元格F1。但不管我的输入值是多少,如果条件变为真 Sub Macro3() Dim i As Integer i = 1 For i = 1 To 10 If (Range("A" & i).Select = Range("B" & i).Select) Then Range("A" & i).Select Selection.C
Sub Macro3()
Dim i As Integer
i = 1
For i = 1 To 10
If (Range("A" & i).Select = Range("B" & i).Select) Then
Range("A" & i).Select
Selection.Copy
Range("F" & i).Select
ActiveSheet.Paste
End If
Next i
End Sub
您可以比较单元格的Value属性,然后相应地设置F列值,而不是选择、复制和粘贴:
Dim i As Integer
For i = 1 To 10
If Range("A" & i).Value = Range("B" & i).Value Then
Range("F" & i).Value = Range("A" & i).Value
End If
Next
把这看作是对尼克回答的一种恭维(如果你觉得他的回答有效,就接受他,这是你应该接受的)。我想帮助您解释代码中的一些错误 修复前: 修复后 要点:
=IF(A1=B1,A1,"")
在F1中,将公式向下拖动以获得类似的结果。您可以使用变量数组来解决上面提出的性能问题。此代码将与Nicks运行相同,只是它将跳过空白单元格
Sub MyArray()
Dim X As Variant
Dim Y As Variant
Dim lngrow As Long
X = Range([a1], Cells(Rows.Count, "B").End(xlUp))
Y = Range([f1], [f1].Offset(UBound(X, 1) - 1, 0))
For lngrow = 1 To UBound(X, 1)
If Len(X(lngrow, 1)) > 0 Then
If X(lngrow, 1) = X(lngrow, 2) Then Y(lngrow, 1) = X(lngrow, 1)
End If
Next
Range([f1], [f1].Offset(UBound(X, 1) - 1, 0)) = Y
End Sub
谢谢你的建议。。我遇到的主要问题是“如果范围(“A”和“i”)。值=范围(“B”和“i”)。值“无论A和B中的值如何,此条件都会失败column@Venkat-你是说即使值相同,也没有匹配?有些事情不是你想象的那样…@tim williams:-是的,以前是这样的……但现在效果很好……问题解决了……我已经完成了代码……现在问题在于性能,我使用两张纸来执行任务。这里,我将excel 1的每一行与excel 2的所有活动行进行比较。因此,我陷入了for循环中……由于行数很高,excel崩溃。我是否可以得到任何改进性能的建议使用要调整为活动工作表的工作表运行代码?A1和B1中哪些值不相同,但会触发真实情况?为什么不做一个简单的IF测试呢?:)
=IF(A1=B1,A1,"")
Sub MyArray()
Dim X As Variant
Dim Y As Variant
Dim lngrow As Long
X = Range([a1], Cells(Rows.Count, "B").End(xlUp))
Y = Range([f1], [f1].Offset(UBound(X, 1) - 1, 0))
For lngrow = 1 To UBound(X, 1)
If Len(X(lngrow, 1)) > 0 Then
If X(lngrow, 1) = X(lngrow, 2) Then Y(lngrow, 1) = X(lngrow, 1)
End If
Next
Range([f1], [f1].Offset(UBound(X, 1) - 1, 0)) = Y
End Sub