好的,我在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
答案 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行是否匹配,那么您只需将For
和If
语句更改为:
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