我想在列中搜索并找到一个字符串。但是,有几个带有该字符串的单元格,我想返回一个包含所有行位置的数组。
Dim r As Range
Set r = Sheets("Sheet3").columns(3).Find(What:="TEST", LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
这仅返回第一行,而不是全部。 如何返回所有包含“ TEST”的行? 谢谢。
答案 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>
有许多不同的适当解决方案,具体取决于您要对这些行号的结果进行处理。