在字符串中搜索文本,将行复制并粘贴到新工作表

Posted

技术标签:

【中文标题】在字符串中搜索文本,将行复制并粘贴到新工作表【英文标题】:Search for text in a string, copy & paste rows to new sheet 【发布时间】:2013-12-27 05:54:24 【问题描述】:

我是 VBA 编程的新手,我需要一些帮助,以便在 Excel 2010 中编写一个简单的宏。

我需要在 A 列中搜索一个文本字符串(我要搜索的确切文本是 not specified),如果在单元格中找到该字符串,则将该单元格的整行剪切并粘贴到工作簿,然后删除原始工作表中的空行。

我在论坛上搜索了一下,发现了一些代码示例,这些示例几乎可以让我到达我想要的地方,但并不完全。

【问题讨论】:

How to copy a line in excel using a specific word and pasting to another excel sheet? 的可能重复项 【参考方案1】:

如果你使用宏记录器,你可以记录你描述的整个过程,然后查看生成的代码。因为脚本不需要记住它找到“未指定”的位置,所以只需循环直到 find 再也找不到字符串。另外,请记住为目标工作表保留一个行增量器。

【讨论】:

好的。我越来越近了:我使用了很多 Cilla 的上述示例以及宏记录器来提供帮助。我目前能够找到字符串并将行复制到目标工作表中。但是我在循环和使用行增量器时遇到了问题;我正在循环:Do While ActiveCell.Value Empty Loop 但这最终会删除原始工作表上的所有内容!在我添加的新工作表中: Sheets("OtherSheet").Select Range("A" & intPasteRow).Select ActiveCell.Offset(1, 0).Select ActiveSheet.Paste 我添加了偏移量以尝试增加行但它只是粘贴在相同的行上。 我忘记了 - 如果您不关心行的顺序,那么您可以在源工作表上“剪切”并在目标工作表上使用“插入”,从而无需增加计数器对于转移过程。也许尝试从 Cilia 的答案中删除“删除”代码?【参考方案2】:

也许可以尝试类似的方法:

Sub quickexample()

Call FilterData("not specified", xlFilterValues)
ActiveSheet.UsedRange.Copy
Worksheets.Add.Name = "NewSheet"
Worksheets("NewSheet").Paste

结束子

Function FilterData(criteria, voperator)
[A1].AutoFilter Field:=1, _
Criteria1:=criteria, _
Operator:=voperator

结束函数

【讨论】:

【参考方案3】:

可能尝试类似我在下面发布的内容。就像另一位用户建议的那样,我只是从录制宏中获得了大部分内容。如果您是 VBA 新手,那么大多数情况下录制宏是最好的开始!

Dim intPasteRow As Integer
intPasteRow = 2

Sheets("FirstSheet").Select
Columns("A:A").Select
On Error Resume Next
Selection.Find(What:="not specified", After:=ActiveCell, LookIn:= _
    xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
    xlNext, MatchCase:=False, SearchFormat:=False).Activate
If Err.Number = 91 Then
    MsgBox "ERROR: 'not specified' could not be found."
    End
End If

Dim intRow As Integer
intRow = ActiveCell.Row
Rows(intRow & ":" & intRow).Select
Selection.Cut

Sheets("OtherSheet").Select
Range("A" & intPasteRow).Select
ActiveSheet.Paste

Sheets("FirstSheet").Select
Rows(intRow & ":" & intRow).Select
Selection.Delete Shift:=xlUp

【讨论】:

好的。我越来越近了:我使用了很多您的示例以及宏记录器来提供帮助。我目前能够找到字符串并将行复制到目标工作表中。但是我在循环和使用行增量器时遇到问题;我正在循环:Do While ActiveCell.Value Empty Loop 但这最终会删除原始工作表上的所有内容!在我添加的新工作表中: Sheets("OtherSheet").Select Range("A" & intPasteRow).Select ActiveCell.Offset(1, 0).Select ActiveSheet.Paste 我添加了偏移量以尝试增加行但它只是粘贴在相同的行上。 您应该记住的一件事是,当您移动到下一行时,您必须在 DO WHILE 中明确说明(例如 i = i + 1)。您可能会遇到与“OtherSheet”行被覆盖相同的问题。只需确保您正确使用变量以继续在单元格和工作表中移动。【参考方案4】:

好的。我使用了录音机,并暗示你们都离开了我,并想出了这个宏。我没有使用增量器或循环它,而是过滤它并一次性完成。这个过程对我有用,现在我办公室里的每个人......现在每个人都认为我非常擅长 VBA......事实并非如此,但我肯定在路上:)

谢谢大家的帮助!!!

Sub MoveNotSpec()

'过滤主工作表上的“未指定”并剪切、粘贴行到新工作表中并删除主工作表上的空行'

Selection.AutoFilter
ActiveSheet.Range("A1:A2000").AutoFilter Field:=1, Criteria1:= _
    "=*specified*", Operator:=xlAnd
ActiveSheet.UsedRange.Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Sheets("OtherSheet").Select
Range("A2").Select
ActiveSheet.Paste
Sheets("FirstSheet").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
ActiveSheet.Range("A1:A2000").AutoFilter Field:=1

结束子

【讨论】:

以上是关于在字符串中搜索文本,将行复制并粘贴到新工作表的主要内容,如果未能解决你的问题,请参考以下文章

Excel 宏不会将工作表复制到新工作簿

如何将行从一个 Excel 工作表复制到另一个工作表并使用 VBA 创建重复项?

VBA自动过滤复制值,去重并粘贴到其他工作表中

VBA复制粘贴到新工作表,If语句和转置

将数据从一个 Excel 工作表复制到另一个 Excel 工作表

搜索包含文本的单元格并在下一个空白单元格中粘贴值