Excel比较多个单元格与VBA

我需要Excel VBA帮助。

我想知道如何比较同一行,但在不同的列中的多个单元格。

我需要比较特定的单元格E3,G3,I3,并确定是否有任何重复,并删除先前放置的副本。

注意:使用拖放function来填充数据。

电子表格的图像

我尝试使用这样的东西

Dim R1, R2, R3 As Range Set R1 = Range("E3") Set R2 = Range("G3") Set R3 = Range("I3") If (R1 = R2 Or R1 = R3) Then MsgBox "Room Already Used!" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If 

但是我需要比较更多的行和列。

首先是事情。

 Dim R1, R2, R3 As Range 

你可以在VB.Net中做到这一点,所有三个将被声明为一个Range但在VBA中,你必须显式声明它们为Range否则前两个将被声明为一个Variant

 Dim R1 As Range, R2 As Range, R3 As Range 

要比较多个行和列,您可以使用循环。 例如

 With Sheet1 '<~~ Change this to the relevant sheet For i = 3 To 8 '<~~ You actual row numbers If .Range("E" & i).Value = .Range("G" & i).Value Or _ .Range("E" & i).Value = .Range("I" & i).Value Then '~~> do something End If Next i End With 

此外,而不是拖放 ,我会build议使用数据validation列表,以便您不必使用.Undo 。 您可以简单地清除单元格的内容。

这里不需要VBA。 使用以下公式为单元格E3设置自定义数据validation规则:

 =OR(ISBLANK(E3),COUNTIF($E3:$I3,E3)=1) 

然后将单元格复制到G3和I3,然后将行3复制到所需的位置。 然后,您可以使用“数据validation”向导设置自定义错误消息。

上面的公式假设你只需要检查同一行的值(和你的状态一样)。