VBA Autofilter客户编号格式化列?

时间:2014-03-26 14:25:06

标签: excel-vba formatting autofilter vba excel

所以我有60K行的这个文件。我的数据分析师需要经历这个并挑出大约30K行。这种情况每隔几天发生一次。

他们有1张60K行的纸张,他们有另一张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#s。所以id 1将是000001.

问题是当我使用.value将id放入kill数组时,它获取没有格式化的id。所以id 000001将只是1.这将是好的,除了自动过滤器现在不工作。因为id - 1,与id - 000001不匹配。我已经做了一些检查,我发现我可以使用killArray(index) = ActiveCell.Offset(i - 1, 0).text但是在我的研究(和测试)过程中,我发现了这个很慢。

有没有办法让自动过滤器忽略格式化?我已经做了很多研究,但我只是设法找到有日期问题的人。我没有日期问题

2 个答案:

答案 0 :(得分:1)

使用

可能会获得更好的表现
killArray = application.transpose(some_range.value2)
for n = lbound(killarray) to ubound(killarray)
    killarray(n) = Format(killarray(n), "000000")
next n

甚至

Dim killArray
Dim somerange As Range
Set somerange = Range("A2:A10000")
With somerange
    killArray = Application.Transpose(Evaluate("INDEX(TEXT(" & .Address & ",""000000""),)"))
End With

答案 1 :(得分:0)

如果您需要速度,请首先删除不必要的循环:

For i = 1 To numrows
    killArray(Index) = ActiveCell.Offset(i - 1, 0).Value2
Next

这可以替换为:

killArray(Index) = ActiveCell.Offset(numrows - 1, 0).Value2