vba重复数字彼此相邻

时间:2015-08-05 10:44:49

标签: excel vba repeat

好的,我在Excel中有一个可变大小的数组。使用vba我想查找是否有任何重复值,因此彼此相邻的值是相同的,而不仅仅是在整个列中。

我知道excel你可以使用if语句,但是你怎么能用for循环将它传播到整个表单。

我对vba非常新手。这是我的第一次尝试,但它没有工作,我不知道如何继续。

total是用户输入的值

ok = True
For j = 2 To 24
    For l =1 to total
        If ActiveCell.Offset(j, l).Select = ActiveCell.Offset(j + 5, l)
        And ActiveCell.Offset(j + 4, l) And ActiveCell.Offset(j + 3, l) 
        And ActiveCell.Offset(j + 2, l) And ActiveCell.Offset(j + 1, l) Then
            ok = False
        End if
    Next
Next

2 个答案:

答案 0 :(得分:1)

如果您只想标记立即重复的行,只需检查上面一行中的值,看它是否相同。如果是,请标记列。例如:

With Range("B2:B24")
    .Formula = "=IF(A2=A1,""X"","""")"
    .Value = .Value
End With

这是以下数据集的显示方式:

╔════════╦═══════╗
║ Col A  ║ Col B ║
╠════════╬═══════╣
║     17 ║       ║
║     44 ║       ║
║     44 ║ X     ║
║     44 ║ X     ║
║     15 ║       ║
║     93 ║       ║
║     93 ║ X     ║
║     16 ║       ║
╚════════╩═══════╝

答案 1 :(得分:0)

如果您只是想检查列中是否有重复的副​​本,则以下内容将完成您的操作。

Sub arrayDuplicateCheck()
    Dim arrValues() As Variant
    Dim lrow As Long, i As Long, ok As Boolean

    ok = False
    lrow = Cells(Rows.Count, 1).End(xlUp).Row
    arrValues = Range(Cells(1, 1), Cells(lrow, 1))

    For i = 1 To UBound(arrValues, 1) - 1
        If arrValues(i, 1) = arrValues(i + 1, 1) Then
            ok = True
            Exit For
        End If
    Next i

    MsgBox (ok)
End Sub

目前检查A列中的值,如果要检查其他列,则必须调整分配给数组的范围。执行此操作,将arrValues = Range(Cells(1, 1), Cells(lrow, 1))更新为要评估的列号。如果您要更改数组列,则需要将lrow变量更新为相同的列号。

例如,arrValues = Range(Cells(1, 4), Cells(lrow, 4))现在会从Column D创建数组。

修改:如果您想检查下面的所有5行是否匹配,那么您只需将ForIf语句更改为:

For i = 1 To UBound(arrValues, 1) - 5
    If arrValues(i, 1) = arrValues(i + 1, 1) _
    And arrValues(i, 1) = arrValues(i + 2, 1) _
    And arrValues(i, 1) = arrValues(i + 3, 1) _
    And arrValues(i, 1) = arrValues(i + 4, 1) _
    And arrValues(i, 1) = arrValues(i + 5, 1) Then
        ok = True
        Exit For
    End If
Next i