Excel VBA-按数组自动筛选';我也不会返回大数字

Excel VBA-按数组自动筛选';我也不会返回大数字,excel,vba,filter,Excel,Vba,Filter,如下面的工作表和代码所示,我编写了一个脚本,可以根据转换为数组的列表中的值自动筛选数据库。此列表定期使用新值刷新,这些新值会导致不同的行数,并且某些值可能不包含在数据库中 代码基本上是有效的,除了大数字(如898709914414013000)不会作为结果的一部分被过滤。这意味着当我运行脚本时,只返回数据库中的前两个结果,而不返回预期的其余结果。奇怪的是,当这个数字是列表中唯一的一行时,它确实会被过滤掉。我对数字进行了格式化,以删除scienfitic符号,如果这影响了什么的话 我不确定我的代码

如下面的工作表和代码所示,我编写了一个脚本,可以根据转换为数组的列表中的值自动筛选数据库。此列表定期使用新值刷新,这些新值会导致不同的行数,并且某些值可能不包含在数据库中

代码基本上是有效的,除了大数字(如898709914414013000)不会作为结果的一部分被过滤。这意味着当我运行脚本时,只返回数据库中的前两个结果,而不返回预期的其余结果。奇怪的是,当这个数字是列表中唯一的一行时,它确实会被过滤掉。我对数字进行了格式化,以删除scienfitic符号,如果这影响了什么的话

我不确定我的代码出了什么问题,或者是否需要从头重写

样本数据库表:

示例过滤器列表表(无标题,从第1行开始) GRP6077045 GRP6077048 GRP6077050 898709914414013000
这不是什么大问题,我重复了错误,失败的部分是列表的生成。Excel不知道您的筛选条目在哪里。我要提到的第二件事是,我认为过滤后的值必须是文本格式,没有“E^16”之类的内容。 这是对我有用的代码

Public Sub FilterByArray()

Dim Database As Worksheet
Dim Dummy_Sheet As Worksheet

Dim count As Integer
Dim list As Variant

Set Database = ThisWorkbook.Worksheets("Database")
Set Dummy_Sheet = ThisWorkbook.Worksheets("FilterList")

count = WorksheetFunction.CountA(Dummy_Sheet.Range("A1", Dummy_Sheet.Range("A1").End(xlDown)))
Debug.Print count
'If there are no rows in that list, do nothing
If count = 0 Then

'If there are only 1 row in that list, filter by only that result with this code
ElseIf count = 1 Then
Database.Range("A4").AutoFilter Field:=3, Criteria1:=Dummy_Sheet.Range("A1")

'For two or more rows, following code is used
Else
list = Split(Join(Application.Transpose(Dummy_Sheet.Range("A1:A" & CStr(count)).Value), ","), ",")
Database.Range("A4").AutoFilter Field:=3, Criteria1:=list, Operator:=xlFilterValues

End If
End Sub

这不是什么大问题,我重复了错误,失败的部分是列表的生成。Excel不知道您的筛选条目在哪里。我要提到的第二件事是,我认为过滤后的值必须是文本格式,没有“E^16”之类的内容。 这是对我有用的代码

Public Sub FilterByArray()

Dim Database As Worksheet
Dim Dummy_Sheet As Worksheet

Dim count As Integer
Dim list As Variant

Set Database = ThisWorkbook.Worksheets("Database")
Set Dummy_Sheet = ThisWorkbook.Worksheets("FilterList")

count = WorksheetFunction.CountA(Dummy_Sheet.Range("A1", Dummy_Sheet.Range("A1").End(xlDown)))
Debug.Print count
'If there are no rows in that list, do nothing
If count = 0 Then

'If there are only 1 row in that list, filter by only that result with this code
ElseIf count = 1 Then
Database.Range("A4").AutoFilter Field:=3, Criteria1:=Dummy_Sheet.Range("A1")

'For two or more rows, following code is used
Else
list = Split(Join(Application.Transpose(Dummy_Sheet.Range("A1:A" & CStr(count)).Value), ","), ",")
Database.Range("A4").AutoFilter Field:=3, Criteria1:=list, Operator:=xlFilterValues

End If
End Sub
找到了解决办法

Public Sub FilterByArray()

Dim Database As Worksheet
Dim Dummy_Sheet As Worksheet

Dim count As Integer
Dim list As Variant

Set Database = ThisWorkbook.Worksheets("Database")
Set Dummy_Sheet = ThisWorkbook.Worksheets("FilterList")

count = WorksheetFunction.CountA(Dummy_Sheet.Range("A1", Dummy_Sheet.Range("A1").End(xlDown)))
Debug.Print count
'If there are no rows in that list, do nothing
If count = 0 Then

'If there are only 1 row in that list, filter by only that result with this code
ElseIf count = 1 Then
Database.Range("A4").AutoFilter Field:=3, Criteria1:=Dummy_Sheet.Range("A1")

'For two or more rows, following code is used
Else
dummy_string = ""
For n = 1 To count
dummy_string = dummy_string & ";" & Dummy_Sheet.Cells(n, 1).Text
Debug.Print dummy_string
Next
list = Split(dummy_string, ";")
Database.Range("A4").AutoFilter Field:=3, Criteria1:=list, Operator:=xlFilterValues

End If
End Sub
找到了解决办法

Public Sub FilterByArray()

Dim Database As Worksheet
Dim Dummy_Sheet As Worksheet

Dim count As Integer
Dim list As Variant

Set Database = ThisWorkbook.Worksheets("Database")
Set Dummy_Sheet = ThisWorkbook.Worksheets("FilterList")

count = WorksheetFunction.CountA(Dummy_Sheet.Range("A1", Dummy_Sheet.Range("A1").End(xlDown)))
Debug.Print count
'If there are no rows in that list, do nothing
If count = 0 Then

'If there are only 1 row in that list, filter by only that result with this code
ElseIf count = 1 Then
Database.Range("A4").AutoFilter Field:=3, Criteria1:=Dummy_Sheet.Range("A1")

'For two or more rows, following code is used
Else
dummy_string = ""
For n = 1 To count
dummy_string = dummy_string & ";" & Dummy_Sheet.Cells(n, 1).Text
Debug.Print dummy_string
Next
list = Split(dummy_string, ";")
Database.Range("A4").AutoFilter Field:=3, Criteria1:=list, Operator:=xlFilterValues

End If
End Sub

谢谢你的帮助,但是我仍然在代码上遇到同样的问题。这些数字的格式是为了删除科学符号(格式单元格>自定义>0),如果它影响到任何东西,你能将文件上传到我能看到那里发生了什么的任何地方吗@RandyChoI认为上传文件是有规则的,所以这里有一个交叉帖子,里面有你复制的样本数据:我没有找到解决方案,我试了很多次。但我发现了它不能像现在这样工作的一个原因。列表的拆分和合并在“,”处拆分,而数字在第一个数字后面有一个“,”将每个大数字拆分为两个。list=Split(Join(Application.Transpose(Dummy_Sheet.Range)(“A1:A”&CStr(count)).Value),“;”),“;”)使用此选项。是否有其他方法根据该列表自动筛选(定期更改)?由于我当前的代码不起作用,所以感谢您的帮助,但我仍然遇到与代码相同的问题。这些数字的格式是为了删除科学符号(格式单元格>自定义>0),如果它影响到任何东西,你能将文件上传到我能看到那里发生了什么的任何地方吗@RandyChoI认为上传文件是有规则的,所以这里有一个交叉帖子,里面有你复制的样本数据:我没有找到解决方案,我试了很多次。但我发现了它不能像现在这样工作的一个原因。列表的拆分和合并在“,”处拆分,而数字在第一个数字后面有一个“,”将每个大数字拆分为两个。list=Split(Join(Application.Transpose(Dummy_Sheet.Range)(“A1:A”&CStr(count)).Value),“;”),“;”)使用此选项。是否有其他方法根据该列表自动筛选(定期更改)?因为我现在的代码不太管用!它的工作原理完全符合meNo问题的预期,我必须解决这个问题。非常感谢!它完全符合meNo问题的预期,我必须解决这个问题。