在列中查找字符串,然后返回并返回带有行号的数组

时间:2018-07-16 17:36:34

标签: excel excel-vba

我想在列中搜索并找到一个字符串。但是,有几个带有该字符串的单元格,我想返回一个包含所有行位置的数组。

Dim r As Range
Set r = Sheets("Sheet3").columns(3).Find(What:="TEST", LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)

这仅返回第一行,而不是全部。 如何返回所有包含“ TEST”的行? 谢谢。

3 个答案:

答案 0 :(得分:2)

这应该可以解决问题...

它将循环遍历Column 3的{​​{1}}以产生一个包含每次出现Sheet3的行号的数组。根据示例中使用的选项,它区分大小写,并且必须占据整个单元格。

TEXT

它的工作方式是先用逗号分隔的值列表构建一个字符串,然后使用Split function将其拆分为一个数组。

答案 1 :(得分:0)

这将合并等于“ Test”的范围,

Sub SelectA1()
    Dim FrstRng As Range
    Dim UnionRng As Range
    Dim c As Range
    Set FrstRng = Range("C:C").SpecialCells(xlCellTypeConstants, 23)

    For Each c In FrstRng.Cells
        If LCase(c) = "test" Then
            If Not UnionRng Is Nothing Then
                Set UnionRng = Union(UnionRng, c)    'adds to the range
            Else
                Set UnionRng = c
            End If
        End If
    Next c

    UnionRng.Select    ' or whatever you want to do with it.
End Sub

答案 2 :(得分:0)

您没有说明要对结果做什么。但是,您可以返回一个行号数组,其中包含单词“ TEST”以及工作表公式:

不区分大小写:

=AGGREGATE(15,6,SEARCH("TEST",$C:$C)*ROW($C:$C),ROW(INDIRECT("1:" & COUNTIF($C:$C,"*TEST*"))))

区分大小写:

=AGGREGATE(15,6,FIND("TEST",$C:$C)*ROW($C:$C),ROW(INDIRECT("1:" & SUMPRODUCT(--ISNUMBER(FIND("TEST",$C:$C))))))

不区分大小写;单元格=测试(例如整个单元格内容):

=AGGREGATE(15,6,1/($C:$C="test")*ROW($C:$C),ROW(INDIRECT("1:"&COUNTIF($C:$C,"test"))))

如果要将此数组用于其他用途,例如返回第三列=“ test”的行的内容,则也可以使用VBA或工作表中的过滤器来执行此操作。 / p>

有许多不同的适当解决方案,具体取决于您要对这些行号的结果进行处理。