比较Excel VBA中的值

我想比较单元格A1与B1,如果它是真正的填充单元格F1的A1值。 但是不pipe我的input值如何条件成立。

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属性,而不是select,复制和粘贴,然后相应地设置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 

考虑这个对Nick的回答的赞美(如果你发现它的工作,接受他,你应该)。 我想帮助解释一些代码中的错误。

FIX之前:

 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 

在修正后

 Sub Macro4() Dim i As Long 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 End Sub 

要点:

  1. 使用Long而不是Integer(因为VBA会把int转换成很长的一个小的优化)
  2. 不需要连续两次声明i = 1
  3. 您应该比较值,而不是简单地select单元格。 很less,如果有的话,需要使用.Select关键字。 您可以直接访问所有对象的属性。
  4. 复制和粘贴是一个沉重的操作。 既然你是在VBA中,也可以把A中的值赋给B中的单元格,它更快,更有效率。

我希望这有帮助。 顺便说一句,你可以简单地input:

 =IF(A1=B1,A1,"") 

在F1中拖动公式得到相似的结果。

您可以使用变体数组来解决您在上面提出的性能问题。 这个代码将运行相同的尼克斯,除了它会跳过空白单元格,即它会

  1. 如果A和B是相同的,则更新F值
  2. 如果A单元格为空,则跳过更新
  3. 如果A <> B,则保留现有的F值

我不清楚你是如何比较两张纸上的行,你可以扩大?

  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