【问题标题】:Excel comparing multiple cells with vbaExcel将多个单元格与vba进行比较
【发布时间】:2023-03-14 15:12:01
【问题描述】:

我需要 Excel VBA 方面的帮助。

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

我需要比较特定单元格 E3、G3、I3 之类的内容,并找出其中是否有重复项,然后删除首先放入的重复项。

注意:使用拖放功能填充数据。

我尝试使用类似的东西

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

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

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    首先要做的事情。

    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。您可以简单地清除单元格的内容。

    【讨论】:

    • 这个我试过了,如果不是拖拽就成功了,但是客户希望工作表是拖拽类型的。
    【解决方案2】:

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

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

    然后将单元格复制到 G3 和 I3,并根据需要向下复制第 3 行。然后,您可以使用数据验证向导设置自定义错误消息。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      相关资源
      最近更新 更多