【问题标题】:Find, select, and copy row查找、选择和复制行
【发布时间】:2020-12-17 02:48:17
【问题描述】:

如何在某列中找到包含某个字符串的单元格,然后选择整行并使用 Excel vba 复制该行?

我对使用 Excel VBA 比较陌生,并且花了几天时间尝试自己编写代码。 我正在处理将不同数据集复制到其中的工作表。每个数据集都将在 A 列的某个单元格中包含字符串“page”,但是该行因数据集而异。我现在需要一些 vba 代码来首先识别包含字符串“Page”的列 A 的单元格,然后选择整行并将其复制到表的最后一行下方(其行数也不同)。我已经设法编写了一些将整行复制到表格底部的代码,因此我也可以重用该代码,主要问题是识别包含字符串的正确行。 有人可以帮我解决这个问题吗?

提前致谢!

【问题讨论】:

  • “我已经写了一些代码”请在上面的问题中添加您的代码 (edit),并描述您遇到的问题或错误。还对如何使用Range.Find method 进行一些研究,并尝试使用它来查找您的字符串“Page”。 • 还有一些很好的例子(或屏幕截图)来说明您的工作表/数据看起来如何有助于理解您的问题。并查看Why is “Can someone help me?” not an actual question?

标签: excel vba


【解决方案1】:

你可以试试:

Sub test()

    Dim strSearch As String
    Dim ColumnNo As Long, LastRow As Long
    Dim rngFound  As Range
    Dim wsDestination As Worksheet, wsSource As Worksheet
    
    'set worksheets
    With ThisWorkbook
        Set wsSource = .Worksheets("Sheet1")
        Set wsDestination = .Worksheets("Overview")
    End With
    
    'Set the value you want to search
    strSearch = "*Page*"
    
    'Set the column you want to seach
    ColumnNo = 1
    
    'Create a with statement to point Sheet1.
    With wsSource
        
        'Search for strSearch in column number ColumnNo
        Set rngFound = .Columns(ColumnNo).Find(strSearch, LookIn:=xlValues, lookat:=xlWhole)
        
        If Not rngFound Is Nothing Then
            LastRow = wsDestination.Cells(wsDestination.Rows.Count, "A").End(xlUp).Row + 1
            'Copy row.
            .Rows(rngFound.Row).EntireRow.Copy
            'Paste row
            wsDestination.Rows(LastRow).PasteSpecial Paste:=xlPasteValues
            'Delete row
            .Rows(rngFound.Row).EntireRow.Delete Shift:=xlUp
        Else
            'Msg box
            MsgBox "Value not found."
        End If
        
    End With
      
End Sub

【讨论】:

  • 非常感谢 - 现在似乎可以正常工作了 - 但现在我遇到了粘贴部分的问题,这就是我所拥有的:` If Not rngFound Is Nothing Then .Columns(rngFound. Row).EntireRow.Copy Worksheets("Overview").Cells(Rows.Count,1).End(xlUp).offset(1,0).PasteSpecial xlPasteValues .Columns(rngFound.Row).EntireRow.Select Selection.Delete Shift:=xlUp End If` 它给了我一条错误消息,说复制的范围和粘贴的范围不同,你知道如何解释吗?提前致谢!
  • 顺便说一句,我如何添加代码作为评论?很抱歉,但正如你所见,我绝对是 VBA 和 stackoverflow 的初学者
  • 大家好,我知道需要一些代码将 H2 中的值从工作表 (3) 粘贴到 M 列和包含字符串“Page”的行。我尝试复制和调整您已经编写的代码,但我没有得到它。如何指定我想将值粘贴到 M 列中?
【解决方案2】:

这是一个代码,用于将整个行从名为 Sheet1 的工作表复制到另一个名为 Sheet2 的工作表,条件为“页面”

Private Sub test()
Dim i As Integer, lastrow As Integer, newrow As Integer
lastrow = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To lastrow
If Worksheets("Sheet1").Range("A" & i) Like "*" & "Page" & "*" Then
Worksheets("Sheet1").Range("A" & i).EntireRow.Copy
Worksheets("Sheet2").Activate
newrow = Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
Worksheets("Sheet2").Cells(newrow, 1).Select
ActiveSheet.Paste
End If
Next i
End Sub

【讨论】:

  • 您的代码存在一些问题: 1. 您应该使用Long 数据类型而不是Integer,因为最后一行很容易超出Integer 数据类型的范围。 2. 您获取lastrowRow.Count 值的方式将从可能不是Sheet1 的活动工作表中获取行数。 3. 你不应该使用SelectActivate 之类的东西。他们减慢了这个过程并且没有实际用途:因此他们不赞成他们。希望这会有所帮助
猜你喜欢
  • 2013-08-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
相关资源
最近更新 更多