所以我做了一个宏来做一堆事情。一件事是在sheet2的sheet1中找到重复的单元格。给定表1中的columnA,sheet2上的columnB中的任何值是否与columna sheet1中的任何值匹配。
我知道有一个删除重复项,但我只想标记它们,而不是删除。
我在想一些关于过滤的东西。我知道当你过滤的时候,你可以选择多个条件,所以如果你有一个包含20个不同值的列,你可以在过滤器中选择5个值,它将显示包含这5个值的特定列的行。所以我录制了一个宏,并检查了代码,我看到它使用了字符串数组,其中要搜索的每个值都在字符串数组中。有没有办法只指定一整列并将每个值添加到字符串数组中?
提前感谢
发布于 2014-01-21 21:17:14
以下是将项加载到数组中的三种不同方法。第一种方法要快得多,但只是将所有内容都存储在列中。不过,您必须小心这一点,因为它创建了一个多维数组,该数组不能传递给AutoFilter。
方法1:
Sub LoadArray()
Dim strArray As Variant
Dim TotalRows As Long
TotalRows = Rows(Rows.Count).End(xlUp).Row
strArray = Range(Cells(1, 1), Cells(TotalRows, 1)).Value
MsgBox "Loaded " & UBound(strArray) & " items!"
End Sub
方法二:
Sub LoadArray2()
Dim strArray() As String
Dim TotalRows As Long
Dim i As Long
TotalRows = Rows(Rows.Count).End(xlUp).Row
ReDim strArray(1 To TotalRows)
For i = 1 To TotalRows
strArray(i) = Cells(i, 1).Value
Next
MsgBox "Loaded " & UBound(strArray) & " items!"
End Sub
如果您提前知道了这些值,并且只想将它们列在一个变量中,那么可以使用Array()
Sub LoadArray3()
Dim strArray As Variant
strArray = Array("Value1", "Value2", "Value3", "Value4")
MsgBox "Loaded " & UBound(strArray) + 1 & " items!"
End Sub
发布于 2014-01-22 14:29:08
不确定其他人是否会有这个问题,所以我想我应该把我找到的答案贴出来。我喜欢@Ripster发布的数组解决方案(感谢它,它几乎可以工作),但它在这种情况下不会真正工作。我正在处理的是一个包含1个ID列的大型数据表,我想检查其他表,看看该表中是否有重复项(使用ID列)。不是删除,只是做个标记,这样我就可以查看它们了。可能会有超过50K的行循环通过每一行,这将需要很长时间。
因此,我想我可以做的是将ID列从另一个工作表复制到主工作表中,并使用条件格式选项以某种颜色标记副本。(它将标记两列中的行),然后我可以按颜色筛选列,只显示我用来标记副本的颜色。如果我以编程方式将一列添加到我正在检查行号的工作表中,我甚至可以将该列包括在主表中,这样当我过滤颜色时,我可以看到它们在工作表中的哪些行。
这样做之后,我可以录制并改编一个宏,以便为不太喜欢编程的同事自动执行此操作
非常感谢大家!
编辑-添加的代码
在选择要比较的列之后,下面是用红色文本标记重复项而不填充的代码:
Selection.FormatConditions.AddUniqueValues
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
Selection.FormatConditions(1).DupeUnique = xlDuplicate
With Selection.FormatConditions(1).Font
.Color = -16383844
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
然后,由于两列都标记了重复项,因此您可以选择实际要检查的列,下面是要过滤的代码:
`Selection.AutoFilter
ActiveSheet.Range("$C$1:$C$12").AutoFilter Field:=1, Criteria1:=RGB(156, 0 _
, 6), Operator:=xlFilterFontColor`
(在我的测试中,我使用c列作为筛选列,可以通过编程的方式使用cells()
引用或range(cells(), cells())
类型的引用
我祝每个人在未来的事业中好运!再次感谢@ripster
https://stackoverflow.com/questions/21268383
复制