2016-08-03 87 views
2

我需要Excel VBA帮助。Excel将多个单元格与vba进行比较

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

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

注意:拖放功能用于填写数据。

Image of Spreadsheet

我试图用这样的

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 

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

回答

3

第一件事第一件事。

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 

而且不是将&对于降,我会建议使用数据验证列表,这样你就不必使用.Undo。您可以简单地清除单元格的内容。

+0

我试了一下,它发现,如果它不是拖放,但客户希望工作表是一个拖放类型。 – user6670582

0

这里不需要VBA。设置E3单元格的自定义数据验证规则用下面的公式:

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

然后将细胞复制到G3和I3,以及复制排3倒至于你所需要的。然后,您可以使用“数据验证”向导设置自定义错误消息。

上面的公式假定您只需要检查同一行中的值(如您所述)。

相关问题