VBA 自动过滤器可过滤字符串(包含数字)和数字的单元格

问题描述 投票:0回答:1

第一次作为这里的用户,也是 VBA 的初学者,所以请耐心等待。

我有一个想要使用 VBA 进行过滤的列表,该列表在我用来应用过滤器的列中同时包含数字和字符串(其中一些包含数字作为 ID 的一部分)。如果 filterValue 是数字或数字,我希望能够在列中的数字或字符串中找到它。例如,如果三个单元格的值分别为“3231”(作为数字)、“MN23”和“AR234IT”(作为两个字符串),我应该使用 filterValue=23(也可以使用 2 或 3)获取其中三个单元格。

如果我使用“”和filterValue&“”作为Criteria1,它适用于字符串,但它不会返回过滤列中包含数字格式单元格的行。我通过将 ' 添加到数字单元格(将它们转换为文本格式),将其原始格式指示符保存在数组中,按“”&filterValue&“”进行过滤,然后从最初是一个字符串单元格中删除 ' 来解决这个问题数量。

这是代码:

rowCount = filteredRegion.Rows.Count
ReDim isNumberArray(1 To rowCount) As Boolean
For i = 1 To rowCount
    If Application.WorksheetFunction.IsNumber(filteredRegion(i, 3)) And filteredRegion(i, 3) <> "" Then
        filteredRegion(i, 3) = "'" & (filteredRegion(i, 3))
        isNumberArray(i) = True
    Else
        isNumberArray(i) = False
    End If
Next i
filteredRegion.AutoFilter Field:=3, Criteria1:="*" & filterValue & "*"
For i = 1 To rowCount
    If IsNumeric(filteredRegion(i, 3)) And filteredRegion(i, 3) <> "" And numberArray(i) Then
        filteredRegion(i, 3) = CDbl(filteredRegion(i, 3))
    End If
Next i

这有效。我过滤掉了其中包含 filterValue 的行,无论它们具有数字还是文本内容,并且在 VBA 调用后保留其原始格式。

但是,除了非常糟糕和低效之外,只要编辑的单元格没有返回数字的公式,它就可以工作。如果他们这样做了,公式就会被删除,我就会恢复它的值。我想我可以保存公式并检索它,但听起来仍然很糟糕。此外,我在一列中有数组公式,所以它会变得非常讨厌。有人可以帮我吗?有没有办法让我根本不编辑单元格?

excel vba autofilter
1个回答
0
投票

此代码片段隐藏了特定列中部分包含定义文本的所有行:

Sub myfilter()

Set filteredrange = Range("A56:H62")
Lookup = "23"
Colvalue = 3

For i = 1 To filteredrange.Rows.Count
If InStr(1, filteredrange.Cells(i, Colvalue), Lookup) = 0 Then
filteredrange.Rows(i).Hidden = True
End If

Next i

End Sub

要取消隐藏它们:

filteredrange.Rows.Hidden = False

© www.soinside.com 2019 - 2024. All rights reserved.