在Excel工作表中搜索文本并将单元格范围提取到表中

通常,我必须从excel工作表中提取一些数据。大多数情况下,工作表足够小,可以手动完成操作,这意味着需要查找特定的字符串并手动复制粘贴感兴趣的单元格。

Example of an excel sheet

这次,我有一个超过5000行的文件,这使我无法像往常一样执行此操作。这是编写简单代码自动执行此操作的好时机。就我而言,最好的方法是:

  • 1)查找包含术语“文本”的单元格
  • 2)对于每个单元格:
    • 2.1)选择一个单元格范围
    • 2.2)复制单元格范围并将其粘贴到此目标范围

由于我不习惯编码,因此我在互联网上搜索行为相似的一些代码。到目前为止,我发现的是1)步骤的代码。在以下代码中,单元格的地址写在目标范围内:

Dim findWhat As String,address As String
Dim fsr As Range,rs As Range,fCount As Long

findWhat = InputBox("Enter what you want to find?","Find what...")

If Len(findWhat) > 0 Then
    'clearFinds
    Set frs = Range("A1:AW6000")
    Set rs = frs.Find(What:=findWhat)
    If Not rs Is Nothing Then
        address = rs.address
        Do
            Range("bb1").Offset(fCount).Value = rs.Value
            Range("bc1").Offset(fCount).Value = rs.address
            Set rs = frs.FindNext(rs)
            fCount = fCount + 1
        Loop While Not rs Is Nothing And rs.address <> address
    End If
End If

关于步骤2.1),我知道我必须实现此步骤才能为步骤1)中找到的每个单元格选择一个范围:

Range(activeCell,activeCell.Offset(4,9))

最后,我计划将以下代码用于步骤2.2):

Worksheets("Sheet1").Range("A1:D4").Copy _ 
    destination:=Worksheets("Sheet2").Range("E5")

尽管我付出了很多努力,但我不知道如何正确编写代码以使此代码正常工作。有人可以给我一点帮助吗?

marish 回答:在Excel工作表中搜索文本并将单元格范围提取到表中

尝试一下。您可能需要调整目标范围以适合。

还要检查Find参数;特别是要查找仅包含在输入框中输入的文本的单元格,还是要包含其他文本(调整lookat)。

Resize位表示复制5行乘10列的范围,其中左上方的单元格是包含找到的文本的单元格。

Sub x()

Dim findWhat As String,s As String
Dim rs As Range,frs as Range

findWhat = InputBox("Enter what you want to find?","Find what...")

If Len(findWhat) > 0 Then
    'clearFinds
    Set frs = Worksheets("Sheet1").Range("A1:AW6000")
    Set rs = frs.Find(What:=findWhat,Lookat:=xlPart,MatchCase:=False,SearchFormat:=False)
    If Not rs Is Nothing Then
        s = rs.address
        Do
            Worksheets("Sheet2").Range("A" & Rows.Count).End(xlUp)(2).Resize(5,10).Value = rs.Resize(5,10).Value
            Set rs = frs.FindNext(rs)
        Loop While rs.address <> s
    End If
End If

End Sub
本文链接:https://www.f2er.com/3118612.html

大家都在问