第一次作为这里的用户,也是 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 调用后保留其原始格式。
但是,除了非常糟糕和低效之外,只要编辑的单元格没有返回数字的公式,它就可以工作。如果他们这样做了,公式就会被删除,我就会恢复它的值。我想我可以保存公式并检索它,但听起来仍然很糟糕。此外,我在一列中有数组公式,所以它会变得非常讨厌。有人可以帮我吗?有没有办法让我根本不编辑单元格?
此代码片段隐藏了特定列中部分包含定义文本的所有行:
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