首页 > 解决方案 > 如果在特定列中发现重复项,则用于更改值的 Excel VBA 代码

问题描述

我是 Excel VBA 的初学者。我只想知道如果发现重复,我将使用什么代码来更改所选行/列的值。我附上的图片中的示例B804 & B805具有相同的值。在Column C中,我使用了如果发现重复则添加数字的公式。我想在 VBA 代码中做的是,我想删除公式(不影响另一个单元格),Column C或者C805但它会首先问一个问题,比如“已经提到工作订单,你想继续吗?” 然后如果用户单击“是”,则程序是删除公式C805并在 b 列中找到重复值并粘贴相同的值(意味着 c 列中公式中的任何结果都将粘贴相同的结果如果发现是否重复)。

我尝试了一个代码,但我不知道下一步该放什么。我希望你能帮助我。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("B2:B2399")) Is Nothing Then
        With Target(1, 2)
            '.Value = Date
            .EntireColumn.AutoFit
        End With
    End If
    If Range("C1").Value = "Formula" Then
        Columns("C").EntireColumn.Hidden = True
    Else
        Columns("C").EntireColumn.Hidden = False
    End If
    If Range("C:C").Value = .Duplicate Then
        UserForm4.Show
    End If
End Sub

在此处输入图像描述 在此处输入图像描述

标签: vbaexcel-formula

解决方案


试试这个代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    Set RNG = Range("B2:B2399")
    
    If Intersect(Target(1), RNG) Is Nothing Then Exit Sub
    v = Target(1).Value
    If WorksheetFunction.CountIfs(RNG, v) > 1 Then 'find duplicates
        If MsgBox("Work order was already mentioned, would you like to proceed?", _
            vbExclamation + vbYesNo + vbDefaultButton1, "Duplicate found") = vbYes Then
            
            Row = Application.Match(v, Columns("B"), 0) 'find the row with the duplicate
            If IsNumeric(Row) Then
                Target(1).Offset(, 1) = Cells(Row, 3)
            End If
        End If
    End If
End Sub

推荐阅读