我已经尝试过removeduplicates,selections和scripting dictionaries中的这么多方法,但我无法让它工作。我知道有多种方法可以做到这一点,但如果你们中的任何一方可以提供帮助,那就太棒了。
我有一个值列表,我从另一张纸(最多约80k行)中向下拉入单元格B13。我然后尝试删除重复的值和单元格,所以我留下了唯一的值,然后我可以用它来执行其他工作表上的查找。
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
,因为我只有列但没有运气。
谢谢
答案 0 :(得分:1)
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
所以代码基本上说如果列A(我只是一个增量器)不是空的,那么我们将读取列A的条目。数据只是一个变量,你可以设置它等于范围您希望在字典中阅读的值。显然,字典键是唯一的,不能重复,因此代码会询问密钥是否已存在于字典中。如果是这样,我们将添加一个计数或值。如果没有,我们会将该密钥添加到字典中。在循环结束时,您的词典将存储所有唯一条目及其出现的次数。
现在我们可以引用它们或打印它们。
For r = 0 To dict.Count
Sheets("Results").Range("B" & iResults) = dict.Keys(r)
Sheets("Results").Range("C" & iResults) = dict(dict.Keys(r))
Next
第二段代码是从0到字典中条目数的循环。它从零开始,因为字典像数组一样存储,VBA数组基于零。第一个语句将打印每个r的唯一键,直到字典中没有更多条目。第二个语句将打印与其关联的值或项。它将是一个整数值,等于数据中唯一条目出现的次数。
您也可以将此相同的方法用于其他目的,不仅可以打印数据,还可以引用它并在其他地方使用它。但我相信你会发现带有dict.Keys(r)的For循环是运行字典条目的最简单方法。花了几天时间来弄明白这一点,它彻底改变了我的计划。希望这会帮助你。