Vba 从非连续行中提取数据并将其添加到连续行中的不同工作表中

Vba 从非连续行中提取数据并将其添加到连续行中的不同工作表中,vba,excel,optimization,Vba,Excel,Optimization,我正试图从一个区域(A1:a:2000)中提取数据,该区域对某个关键字有任何引用,无论该区域位于何处,并将结果从A1向下以连续行的形式转换到新的工作表中。 电影剧本就是一个很好的例子 如果一部电影的所有台词都在一张纸的a列:“完整电影剧本”,我只想把一个人的台词移到一张新的纸上:“迈克的剧本”。原始“完整电影脚本”表可能如下所示: A1 Mike: Blah Blah Blah A2 Paul: Blah Blah Blah Blah Blah Blah A3 Jerry: Blah Blah

我正试图从一个区域(A1:a:2000)中提取数据,该区域对某个关键字有任何引用,无论该区域位于何处,并将结果从A1向下以连续行的形式转换到新的工作表中。
电影剧本就是一个很好的例子

如果一部电影的所有台词都在一张纸的a列:“完整电影剧本”,我只想把一个人的台词移到一张新的纸上:“迈克的剧本”。原始“完整电影脚本”表可能如下所示:

A1 Mike: Blah Blah Blah
A2 Paul: Blah Blah Blah Blah Blah Blah
A3 Jerry: Blah Blah Blah Blah
A4 Mike: Blah
A5 Jerry: Blah Blah Blah  
A6 Mike: ...
我想用VBA做的是使用关键字“Mike”将Mike的行移动到新工作表:

迈克的剧本

A1 Mike: Blah Blah Blah
A2 Mike: Blah
A3 Mike: ...

我知道我可以在第二页中使用IF语句并对数据进行排序,但理想情况下,我希望能够做到这一点,而不必过滤和排序以获得输出。我正在探索Visual Basic中的选项,但我想可能有人知道如何执行此操作。

将其放入未使用的单元格中

=INDEX(A:A, AGGREGATE(15, 6, ROW(A$1:A$2000)/(LEFT(A$1:A$2000, FIND(":", A$1:A$2000)-1)="mike"), ROW(1:1)))
填写,直到得到
#NUM错误。工作完成后,移动到目标工作表,并更正单元格范围以包括原始工作表。(可选)使用
IFERROR
包装器显示零长度字符串,而不是工作表错误代码


很抱歉,我正在排序的真实数据实际上不包含冒号。我之所以使用电影纸条类比,是因为它帮助我尽可能地解释它,而不必共享敏感数据。如果没有冒号的FIND,你怎么写这个公式呢?把
Mike
放进一个未使用的单元格(例如Z99)并替换
LEFT(A$1:A$2000,FIND(“:”,A$1:A$2000)-1)=“Mike”
LEFT(A$1:A$2000,LEN(Z$99))=Z$99
@Jeeped,非常感谢!我一直在用这个公式,效果很好!然而,我需要把公式向下拉到大约500行,这样我才能确保我得到从第一页带来的所有数据。但在某些情况下,需要返回的行数不到500行,在没有数据可供提取的情况下运行公式是一种内存浪费,而且会降低excel的速度。因此,这是下一个挑战。我想数一数“迈克的台词”会被停多少次,然后才会停。那么,有没有一种方法可以计算如果我把公式拉下来,我会有多少行?