Excel VBA-当行中的其他值满足条件时比较单元格值

时间:2018-10-10 19:56:00

标签: excel vba excel-vba

A到E列中有数据。我想做的是在A,B,C和D列相同时比较E列中的值,然后将X的值添加到列中的行如果满足这些条件,则为F。我只想标记E列中不匹配的那些,但是当我标记一行时,应该标记所有具有相同A,B,C和D值的行。

例如,如果前三行的A,B,C和D相等,那么我想比较这些条目。由于与E1或E2相比E3中存在不匹配,我希望F1到F3显示为X。由于A,B,C和D在第4行和第5行中相等,但是E4和E5匹配,所以我希望忽略那些细胞。

我现在拥有的是:

Sub Compare()

Worksheets(Sheet1).Activate
        For w = 1 To Sheet1.Cells(Rows.Count, "A").End(xlUp).Row
        For v = -10 To 10
        If Sheet1.Cells(w, "A").Value = Sheet1.Cells(w + v, "A").Value And Sheet1.Cells(w, "B").Value = Sheet1.Cells(w + v, "B").Value And Sheet1.Cells(w, "C").Value = Sheet1.Cells(w + v, "C").Value And Sheet1.Cells(w, "D").Value = Sheet1.Cells(w + v, "D").Value And Sheet1.Cells(w, "E").Value <> Sheet1.Cells(w + v, "E").Value Then
        Sheet1.Cells(w, "F").Value = "X"
        End If
        Next v
        Next w


End Sub

但是它不会运行。我需要进行哪些更改才能使其正常工作?

1 个答案:

答案 0 :(得分:0)

变化很大。同样在您的问题中,关于检查3行,因此我设置了一个变量vrange=3

 Sub Compare()
    Dim crit As Boolean
    vrange = 3
   'Sheet1.Activate
   Endi = Sheet1.Cells(1, 1).End(xlDown).Row
            For r = 1 To Endi
              vmin = WorksheetFunction.max(1, r - vrange) - r
              vmax = WorksheetFunction.min(Endi, r + vrange) - r
               For v = vmin To vmax
                crit = True
                For c = 1 To 4
                 crit = crit And Sheet1.Cells(r, c).value = Sheet1.Cells(r + v, c).value
                Next c
                If crit And Sheet1.Cells(r, 5).value <> Sheet1.Cells(r + v, 5).value Then
                 Sheet1.Cells(r, 6).value = "X"
                End If
               Next v
            Next r


    End Sub