Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带特定子字符串的Excel VBA自动筛选_Vba_Excel - Fatal编程技术网

带特定子字符串的Excel VBA自动筛选

带特定子字符串的Excel VBA自动筛选,vba,excel,Vba,Excel,我有多个具有不同字符串的行,我想在其中筛选按此顺序排列的数据 “DI然后是数字”,即DI07493A 列值如下所示: 01利辛 利辛 稻壳 DI07493A ABS16 迪科迪 DI94193A 我正在这样努力 sheet1.Range("A1:A" & LastRow).AutoFilter Field:=4, Criteria1:= DI & #, Operator:=xlFilterValues 它不起作用。有没有办法得到这个结果?第二次尝试。查找 Sub find_my

我有多个具有不同字符串的行,我想在其中筛选按此顺序排列的数据

“DI然后是数字”,即DI07493A

列值如下所示:

01利辛

利辛

稻壳

DI07493A

ABS16

迪科迪

DI94193A

我正在这样努力

sheet1.Range("A1:A" & LastRow).AutoFilter Field:=4, Criteria1:= DI & #, Operator:=xlFilterValues
它不起作用。有没有办法得到这个结果?

第二次尝试。查找

Sub find_my_stuff()

   Dim xFoundCell as Variant
   Dim Runner as Long
   Dim SomeString as String

   Set xFound Cell = Sheets("Sheet1").Range("A1:A" & LastRow).Find("DI", lookat:=xlPart_
   , MatchCase:=True
   Sheets("Sheet2").Range("A" & Runner) = xFoundCell.Address

   SomeString = Sheets("Sheet2").Range("A" & Runner)
   SomeString = Replace(SomeString, "A", "")
   SomeString = Replace(SomeString, "$", "")

   Sheets("Sheet2").Range("B" & Runner) = SomeString
   Sheets("Sheet2").Range("C" & Runner) = Sheets("sheet1").Cells(SomeString,1)
End Sub
正如我所说。。。超级难看,但也许你能知道我想用什么来完成第二次尝试。找到

Sub find_my_stuff()

   Dim xFoundCell as Variant
   Dim Runner as Long
   Dim SomeString as String

   Set xFound Cell = Sheets("Sheet1").Range("A1:A" & LastRow).Find("DI", lookat:=xlPart_
   , MatchCase:=True
   Sheets("Sheet2").Range("A" & Runner) = xFoundCell.Address

   SomeString = Sheets("Sheet2").Range("A" & Runner)
   SomeString = Replace(SomeString, "A", "")
   SomeString = Replace(SomeString, "$", "")

   Sheets("Sheet2").Range("B" & Runner) = SomeString
   Sheets("Sheet2").Range("C" & Runner) = Sheets("sheet1").Cells(SomeString,1)
End Sub
正如我所说。。。超级难看,但也许你能知道我想完成什么

试试下面的代码:

Sub Filter()
    Dim lastRow As Long, i As Long, ws As Worksheet
    Set ws = Worksheets("sheet_name")
    With ws
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 1 To lastRow
            'this conition checks if cell contains "DI" followed by a digit
            If Not Left(.Cells(i, 1).Value, 3) Like "DI[0-9]" Then
                .Rows(i).Hidden = True
            End If
        Next
    End With
End Sub
请尝试以下代码:

Sub Filter()
    Dim lastRow As Long, i As Long, ws As Worksheet
    Set ws = Worksheets("sheet_name")
    With ws
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 1 To lastRow
            'this conition checks if cell contains "DI" followed by a digit
            If Not Left(.Cells(i, 1).Value, 3) Like "DI[0-9]" Then
                .Rows(i).Hidden = True
            End If
        Next
    End With
End Sub
请尝试以下操作:

有一列(比如A1:A8)和一个标题(例如称为标题),然后是值

然后在B列上,具有相同的标题和B2中的值:B11 be
DI0*
DI1*
DI2*
DI3*
DI4*
DI5*
DI6*
DI7*
DI8*
DI9*

然后使用代码应用以下命令:

Range("A1:A8").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("B1:B11").

尝试以下操作:

有一列(比如A1:A8)和一个标题(例如称为标题),然后是值

然后在B列上,具有相同的标题和B2中的值:B11 be
DI0*
DI1*
DI2*
DI3*
DI4*
DI5*
DI6*
DI7*
DI8*
DI9*

然后使用代码应用以下命令:

Range("A1:A8").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("B1:B11").


只需在子字符串的相关部分添加一个asterix即可


在您的代码中,更改以下内容:
Criteria1:=DI*

您只需在子字符串的相关部分添加一个星号即可



在您的代码中,更改以下内容:
Criteria1:=DI*

您的示例(DI07493A)和其他示例(DI94193A)的末尾有一个
A
,是否应该是按“DI-then-numbers”顺序排列的筛选数据,或者您不需要DICOFDI,但需要按“DI-then-numbers,并可选地以字母结尾”顺序排列的数据.是Di,然后数字rest是可选的。DICOFDI与我的需求不匹配。不确定是否有可能使用过滤器(在数值中间检查一个数字),您可能需要使用一个循环来隐藏与您的需求不匹配的行。我在表中有大量的数据,如果我循环通过每一个,它将消耗大量的时间。你能提出更快的建议吗?看看我的答案。我认为这可能是您所需要的。它不应该是按“DI然后数字和字母”顺序排列的筛选数据吗?因为您的示例(DI07493A)和其他示例(DI94193A)的末尾有一个
A
,或者您不想要DICOFDI,但想要任何按“DI然后数字,并可选地以字母结尾”顺序排列的数据吗.是Di,然后数字rest是可选的。DICOFDI与我的需求不匹配。不确定是否有可能使用过滤器(在数值中间检查一个数字),您可能需要使用一个循环来隐藏与您的需求不匹配的行。我在表中有大量的数据,如果我循环通过每一个,它将消耗大量的时间。你能提出更快的建议吗?看看我的答案。我想这可能是你需要的。这不会做,因为它会得到“DICOFDI”以及我不想要的。一段时间前,我做了一些。查找选项。。。但是读起来有点难看。。。你知道“查找”功能吗?是的,但那怎么行呢?因为我想这和Reg-ex有关。我想根据模式进行过滤,前两个字符是“DI”,下一个是数字。给我一秒钟,我会得到我的代码,并向你展示一个对你有用的示例。你是对的,伙计,这很难看,我们可以使用更干净、更高效的模式搜索进行过滤。我只需要一些东西来给我指出正确的方向。这不会做,因为它也会得到我不想要的“DICOFDI”。不久前,我做了一些事情。查找选项。。。但是读起来有点难看。。。你知道“查找”功能吗?是的,但那怎么行呢?因为我想这和Reg-ex有关。我想根据模式进行过滤,前两个字符是“DI”,下一个是数字。给我一秒钟,我会得到我的代码,并向你展示一个对你有用的示例。你是对的,伙计,这很难看,我们可以使用更干净、更高效的模式搜索进行过滤。我只需要一些东西来给我指出正确的方向。我们能把它应用到过滤条件上吗?因为我想把这些数据放在另一张纸上。如果我一次只做一行,我想这需要更长的时间?@SumanKumar不,这是一种定制过滤。但您可以在代码中指定要过滤的工作表。请参阅更新的答案。我们可以将其应用于筛选条件吗?因为我想把这些数据放在另一张纸上。如果我一次只做一行,我想这需要更长的时间?@SumanKumar不,这是一种定制过滤。但您可以在代码中指定要过滤的工作表。请参阅更新的答案。为什么标准范围是从B1开始的,而B1是标题?无论如何,它并不像预期的那样过滤。它给了我一个空白的屏幕,全部被过滤。@SumanKumar您对值和过滤标准使用了相同的标题吗?如果您使用了正确的范围,那么它应该可以工作。请尝试我给出的确切示例,如果它有效,请一点一点地修改它,直到达到您想要的方式,或者如果它不起作用,请让我知道您尝试方法的更多细节(如果可能,请使用代码和图像)。@SumanKumar如您所见,您需要标题。非常感谢,伙计,这是我正在寻找的。因为如果我经历了一个循环,它会非常宽大。再次感谢您的大力支持和洞察力。很高兴我能提供帮助。:)为什么标准范围是从B1开始的,B1是标题?无论如何,它并不像预期的那样过滤。它给了我一个空白的屏幕,所有的内容都被过滤了。@SumanKumar你用了相同的标题吗