Excel 如何在VBA中加速两个集合的比较?
我编写了一个宏,它获取集合的集合,然后获取其中两个集合,并给出相似性。 现在,如果我用一个简单的for循环比较这两个集合,那么比较pCol中包含的所有854个集合将需要几个小时。 这是我的密码:Excel 如何在VBA中加速两个集合的比较?,excel,vba,Excel,Vba,我编写了一个宏,它获取集合的集合,然后获取其中两个集合,并给出相似性。 现在,如果我用一个简单的for循环比较这两个集合,那么比较pCol中包含的所有854个集合将需要几个小时。 这是我的密码: 函数比较集合(ByVal pCol作为集合)作为集合 暗淡的外表和长的一样 暗淡无光 “将相互比较的集合 Dim inCol As集合 暗色外套 '用于返回值的集合 Dim retCol As系列 “单一比较的结果 作为压缩结果的Dim res '比较变量 Dim iIdx的长度为 长的 暗淡无光 Se
函数比较集合(ByVal pCol作为集合)作为集合
暗淡的外表和长的一样
暗淡无光
“将相互比较的集合
Dim inCol As集合
暗色外套
'用于返回值的集合
Dim retCol As系列
“单一比较的结果
作为压缩结果的Dim res
'比较变量
Dim iIdx的长度为
长的
暗淡无光
Set retCol=新集合
对于外部=1到pCol。计数-1
放样坐标=pCol(外部)
对于内部=外部+1至pCol.计数
设置输入=pCol(内部)
设置res=新压缩结果
res.LeftTable=outCol(1)'索引1包含一个标头
res.RightTable=inCol(1)
'比较两个集合A第一个提示:尝试预先计算outCol.Count、inCol.Count和pCol.Count,以避免不必要的计算
第二个提示:如果在对象CompResult中res.Result1和res.Result2是整数,请使用“\”而不是“/”
第三个提示:尽可能使用整数而不是长值
第四个技巧:当为每一列循环时,尝试用“for-each”循环替换for循环。看起来快一点
最后一个技巧可能是转换数组中的集合(范围)并遍历它们,因为它似乎比遍历范围更快。请发布CompResult类好吗?使用ArrayList
,然后可以使用.Contains()
方法。或者使用字典
类并使用.Exists()
查看是否存在匹配项。请注意,字典必须包含唯一键,而ArrayList不包含唯一键。@MacroMan感谢您的提示。这真的让它快了很多。现在,我只需要找到一种快速的方法将我庞大的集合(>300k元素)写入excelsheet@TimvdBerg使用.ToArray()
方法,然后使用Range.Resize()
一次性写入所有内容。@MacroMan谢谢。ToArray()就像一个符咒。唯一的问题是,仅调整大小并不能帮助我一次性编写它。原因是我用嵌套数组代替了二维数组。你知道我该怎么做吗?
Private mLeftTable As String
Private mRightTable As String
Private mResult1 As Double
Private mResult2 As Double
Public Property Get LeftTable() As String
LeftTable = mLeftTable
End Property
Public Property Let LeftTable(value As String)
mLeftTable = value
End Property
Public Property Get RightTable() As String
RightTable = mRightTable
End Property
Public Property Let RightTable(value As String)
mRightTable = value
End Property
Public Property Get Result1() As Double
Result = mResult1
End Property
Public Property Let Result1(value As Double)
mResult1 = value
End Property
Public Property Get Result2() As Double
Result = mResult2
End Property
Public Property Let Result2(value As Double)
mResult2 = value
End Property