如何自动过滤第1列并在第2列中返回相关结果

时间:2015-02-25 16:50:19

标签: excel vba excel-vba autofilter

这是我的第一篇文章。我是VBA和编程的新手。我仍然试图了解何时使用变量和其他所有内容。我正在针对无法更改的下载文件编写基本VBA。代码如下

Sub KPIMacroFull()

Set sht = ThisWorkbook.Worksheets(Sheet1.Name)
Rows("1:2").Select
    Selection.Delete Shift:=xlUp

ActiveCell.Offset(0, 9).Activate
    Range("J:J").AutoFilter 1, 20


lr = Cells(Rows.Count, "J").End(xlUp).Row
    If lr > 1 Then
        Range("A2:A" & lr).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End If


Cells.AutoFilter
Cells.AutoFilter


ActiveCell.Offset(0, 0).Activate
ActiveCell.Offset(0, 20).Activate


Range("AD1").EntireColumn.Insert
Range("AD1").Value = "Rush or Regular"
Range("A1:AK1").Columns.AutoFit
Range("AC:AC").AutoFilter 29, "D"

所以基本上我想做的是自动过滤器列AC的值“D”,“K”,“Q”,“V”,“U”,1,9。然后在列AD中,excel将返回“Regular”。对于AC列中的所有其他值(还有大约15个分类),我希望excel返回“Rush”。我正在考虑一个变量来将Regular设置为上面的值,然后从那里开始,但我迷路了。

我检查过很多其他自动过滤器和VBA帖子,但我的问题似乎更为简陋,并没有找到任何太有帮助。

1 个答案:

答案 0 :(得分:0)

此代码段独立于您的解决方案,因为它过于依赖于视图 我的片段通过你的" AC"列并完成所有必需的填写 这很耗时,但不如你的那么多(我假设你没有处理100,000个记录数据集,更像是对MMO的几百行评估,所以它真的不重要)。
过滤本身取决于您,将该部分添加到我的子末尾。

Sub ertdfgcvb()
LastRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Dim RegBool As Boolean
Dim ert As String
Dim MyArray(6) As String
MyArray(0) = "D"
MyArray(1) = "K"
MyArray(2) = "Q"
MyArray(3) = "V"
MyArray(4) = "U"
MyArray(5) = "1"
MyArray(6) = "9"
For i = 1 To LastRow
    RegBool = False
    ert = CStr(Cells(i, 29).Value) 'the CStr is unnecessary
    'unless you want to make it case-insensitive, in which case
    'you'll want to wrap it in a UCase() function
    For j = 0 To 6 'size of your array
        If InStr(1, ert, MyArray(j)) <> 0 Then RegBool = True
    Next

    If RegBool Then
        Cells(i, 30) = "Regular"
    Else
        Cells(i, 30) = "Rush"
    End If
Next

End Sub