我正在VBA for Excel中寻找一种方法,该方法比将数组group
1或2中的序列分配给数组match
的速度更快,取决于{{1 }}值和group
的值。
匹配条件/过程:
match(a,2)
数组最初为空match
列表的serial1
列表中的序列匹配。serial2
列表相对应的match(a,2)
的值必须为空(即vbnullstring)才能被考虑-否则将考虑下一个serial1
的值。match(a,2)
列表中的序列的serial2
具有对应的值1
,则该组值的位置-group
在{{1 }}对应于pos
列表。match(a,1)
列表中的序列的serial1
具有对应的值serial2
,则该组值的位置-2
在{{1 }}对应于group
列表。我尝试使用scripting.dictionary但被卡住(如链接的问题)。
下面的示例数据和当前代码。
pos
和match(a,2)
的值是唯一的,应视为具有相同数量的值(计数)
当前有超过23000行数据,并且该数据将在未来几个月内逐渐增加。
当前,以下代码在i7处理器上不到8分钟。 主要目的是在可能的情况下减少时间。一个公式可能会更快,但同时也在寻找其他解决方案,例如词典,馆藏等。
不能使用数据库-客户不允许这样做。
这是一个来自以下问题,但与以下问题无关:Excel VBA updating dates efficiently with non-unique string values and boolean data
样本输入数据:
serial1
预期的输出数据:
serial1
当前代码:
serial2
未尝试的字典代码-不知道如何构造它
match1 match2 serial1 serial2 group pos
(blank) (blank) ABC001 ABC002 1 1
(blank) (blank) ABC002 ABC004 2 2
(blank) (blank) ABC003 ABC003 1 3
(blank) (blank) ABC005 ABC006 2 4
(blank) (blank) ABC007 ABC001 2 5
(blank) (blank) ABC004 ABC005 1 6
(blank) (blank) ABC006 ABC007 1 7
答案 0 :(得分:0)
在预期的输出示例中,第3行数据是否不正确?
如果是这样,您应该可以使用公式而不是VBA轻松解决此问题。例如,假设标题行存在并且数据从第2行开始,则第一行列的代码为...
=IF(E2=1,"",MATCH(C2,D:D,0)-1) =IF(E2=2,"",MATCH(C2,D:D,0)-1)