Vba 从一列中删除重复的值和单元格
我从RemovedDuplicates、selections和脚本字典中尝试了很多方法,但我无法让这些方法发挥作用。我知道有很多方法可以做到这一点,但如果你们中的任何人能提供帮助,那就太好了 我有一个值列表,我正在从另一张表(最多约80k行)向下拉入单元格B13。然后,我尝试删除重复的值和单元格,以便留下唯一的值,然后可以使用这些值在其他工作表上执行查找Vba 从一列中删除重复的值和单元格,vba,excel,dictionary,Vba,Excel,Dictionary,我从RemovedDuplicates、selections和脚本字典中尝试了很多方法,但我无法让这些方法发挥作用。我知道有很多方法可以做到这一点,但如果你们中的任何人能提供帮助,那就太好了 我有一个值列表,我正在从另一张表(最多约80k行)向下拉入单元格B13。然后,我尝试删除重复的值和单元格,以便留下唯一的值,然后可以使用这些值在其他工作表上执行查找 Sub Address_Sage() Dim dataBook As Workbook Dim dict As Object
Sub Address_Sage()
Dim dataBook As Workbook
Dim dict As Object
Dim Sage_Data As Worksheet, Address As Worksheet
Dim dataSource As Range, dataDest As Range
Dim sourceDataRowCount As Integer, index As Integer
Dim rowCount As Long
Dim strVal As String
Set dataBook = Application.ThisWorkbook
Set sheetSource = dataBook.Sheets("Sage_Data")
Set sheetDest = dataBook.Sheets("Address")
Set dict = CreateObject("Scripting.Dictionary")
Set dataSource = sheetSource.Range("A3", _
sheetSource.Range("A90000").End(xlUp))
sourceDataRowCount = dataSource.Rows.Count
Set dataDest = sheetDest.Range("B13", "B" & _
sourceDataRowCount)
For index = 1 To sourceDataRowCount
dataDest(index, 1).Value = dataSource(index, 1).Value
Next index
Sheets("Address").Select
rowCount = ActiveSheet.Range("B13").CurrentRegion.Rows.Count
Do While rowCount > 0
strVal = Address.Cells(rowCount, 1).Value2
If dict.exists(strVal) Then
ActiveSheet.Rows(rowCount).EntireRow.Delete
Else
dict.Add strVal, 0
End If
rowCount = rowCount - 1
Loop
'Set dict = Nothing
End Sub
它总是卡在strVal
行上。我已尝试将value2
更改为value1
,因为我只有列,但运气不佳
谢谢你在VBA方面不是很有经验,所以我不能确切地说你在做什么,你的代码在说什么,但我想我会与你分享这一点。上周,我不得不创建一个宏手册,其中返回了不同工作人员在工作中观察到的电气缺陷的独特条目。我制作了一本字典,读取电子表格中的所有条目,然后打印出所有唯一的条目。我会发布代码,并试着引导您完成它
If .Range("A" & i) <> "" Then
If dict.Exists(data) Then
dict(data) = dict(data) + 1
Else
dict.Add Key:=Data, Item:="1"
End If
End If
第二段代码是从0到字典中条目数的循环。它从零开始,因为字典像数组一样存储,而VBA数组以零为基。第一条语句将打印每个r的唯一键,直到字典中不再有条目。第二条语句将打印与其关联的值或项。它将是一个整数值,等于唯一条目在数据中显示的次数
您也可以将相同的方法用于其他目的,不仅仅是打印数据,还可以引用数据并在其他地方使用。但是我相信您会发现,使用dict.Keys(r)的For循环是遍历字典条目的最简单方法。我花了几天时间才弄明白,它彻底改变了我的程序。希望这对您有所帮助。您为什么不使用?应该比重新发明轮子容易。为什么你认为它比拆下的复制品好?这正是微软为此而发明的。您对RemovedUpplicates有任何问题吗?我同意最好使用本机函数,并且您在第一次尝试
RemovedUpplicates
时一定编码错误。不管怎样,你的问题和这个问题非常相似,它有一个有效的解决方案:同意之前的评论。但是,您将Address
声明为一个工作表变量,但从未定义它(顺便说一句,名称不是一个好的选择,因为它是VBA属性,但可能不会阻止代码工作)。value2
中的2与列号无关,也没有value1
属性(afaik)。感谢您的所有评论,已更改回removeduplicates,还更改了address中的sheetname,我已使其正常工作。当我有机会的时候,我会更仔细地看一下脚本字典。。。非常感谢。
For r = 0 To dict.Count
Sheets("Results").Range("B" & iResults) = dict.Keys(r)
Sheets("Results").Range("C" & iResults) = dict(dict.Keys(r))
Next