所以我有60K行这个文件。我的数据分析人员需要经过这一步并挑选出约30K行。每隔几天发生一次。VBA Autofilter客户编号格式栏?
他们有60K行1张,他们有另一个30K行拔出。我把它们放在一个工作簿中。那么我所做的就是编写一个宏,它使用它们用于查找正确行的列中的所有值(它是列A,ID列),并将这些值放入数组中。
代码:
'in this code the active sheet is the one with the 30k rows to pull
For i = 1 To numrows
killArray(index) = ActiveCell.Offset(i - 1, 0).value2 'did research and value2 is fastest
index = index + 1
Next
,然后我使用的自动筛选:
'here the sheet with all 60k rows is active
Cells(1, IdCol).entireColumn.autofilter Field:=1, Criteria1:=Array(killArray), Operator:=xlFilterValues
使然后采取所有30K的Id将它们放入一个数组,并且过滤使用阵列包含所有行的片。然后数据人员可以简要地查看它,并删除所有这些行。
现在,他们已经决定他们真的想为ID列使用自定义格式。所有的ID都在1到6位之间。所以从1 - 999999。数据人员已经决定他们喜欢格式化,以便所有的id都是6位数字,前导0。所以id 1将是000001.
问题是,当我使用.value把id放入kill数组时,它得到的id没有格式化。所以ID 000001将只是1.这将是很好,除了自动过滤器现在不工作。因为id-1与id-000001不匹配。我做了一些检查,发现我可以使用killArray(index) = ActiveCell.Offset(i - 1, 0).text
,但在我的研究(和测试)过程中,我发现这非常慢。
有没有办法让autofilter忽略格式?我已经做了大量的研究,但我只能找到有问题的人。我没有与日期
使用Format:'killArray(index)= Format(ActiveCell.Offset(i-1,0).value2,“000000”)'可能会更快。如果我在一个语句中将整个列加载到一个变体数组中,那么它可能会更快地将范围加载到一个变量中,然后循环遍历数组格式的元素 – JosieP
,这不会使它成为二维数组吗?我可以使用2D阵列作为自动过滤器吗? – user1759942
不,但你可以使用'application.transpose(range.value2)'得到一个数组:-) – JosieP