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

在excel工作表中搜索文本并将单元格范围提取到表中,excel,vba,range,copy-paste,Excel,Vba,Range,Copy Paste,我必须定期从excel表格中提取一些数据。大多数情况下,工作表很小,每只手都可以这样做,这意味着,查找特定字符串并手动复制粘贴感兴趣的单元格 这一次,我有一个超过5000行的文件,这使我无法像往常一样这样做。这是一个很好的机会来编写一个简单的代码来自动完成。就我而言,最好的方法是: 1) 查找包含“文本”一词的单元格 2) 对于每个单元格: 2.1)选择一系列单元格 2.2)复制单元格区域并将其粘贴到此目标区域 由于我不习惯编码,我在互联网上搜索一些行为类似的代码。到目前为止,我发现的

我必须定期从excel表格中提取一些数据。大多数情况下,工作表很小,每只手都可以这样做,这意味着,查找特定字符串并手动复制粘贴感兴趣的单元格

这一次,我有一个超过5000行的文件,这使我无法像往常一样这样做。这是一个很好的机会来编写一个简单的代码来自动完成。就我而言,最好的方法是:

  • 1) 查找包含“文本”一词的单元格
  • 2) 对于每个单元格:
    • 2.1)选择一系列单元格
    • 2.2)复制单元格区域并将其粘贴到此目标区域
由于我不习惯编码,我在互联网上搜索一些行为类似的代码。到目前为止,我发现的是这一步的代码。在以下代码中,单元格地址写入目标范围:

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.2中使用以下代码):


尽管我做了很多努力,但我不知道如何正确地编写代码以使代码正常工作。谁能帮我一点忙吗?

试试这个。您可能需要调整目标范围以适应

同时检查
查找
参数;特别是,您是在寻找只包含输入框中输入的文本的单元格,还是可能包含其他文本的单元格(调整
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
subx()
模糊Find作为字符串,s作为字符串
变暗rs作为范围,frs作为范围
findWhat=InputBox(“输入要查找的内容?”,“查找内容…”)
如果Len(findWhat)>0,则
“清理发现
设置frs=工作表(“表1”)。范围(“A1:AW6000”)
设置rs=frs.Find(What:=findWhat,Lookat:=xlPart,MatchCase:=False,SearchFormat:=False)
如果不是的话,那么rs什么都不是
s=rs地址
做
工作表(“Sheet2”).Range(“A”和Rows.Count).End(xlUp)(2).Resize(5,10).Value=rs.Resize(5,10).Value
设置rs=frs.FindNext(rs)
在rs地址s时循环
如果结束
如果结束
端接头

您是否在某一列中查找您的特定值?或者所有的列?如果我是对的,你想找到一个单词,然后从这个单词开始,把所有的内容都复制到另一张纸上,向下4个单元格,向右9个单元格。找到的每一个词都要这样做?你只需要这些单元格中的文本,还是所有格式等等?@JvdV我正在寻找所有单元格中的特定文本columns@Plutian我不需要为找到的每个单词创建另一张表,而是创建一个“全局”目标范围,如目标表well,在这种情况下,您的
FindNext
方法看起来非常合适。现在,与步骤2.1中的
ActiveCell
不同的是
Find
实际上设置了一个
Range
对象。在您的情况下,
rs
。因此,尝试使用
Offset
从那里开始工作。
Worksheets("Sheet1").Range("A1:D4").Copy _ 
    destination:=Worksheets("Sheet2").Range("E5")
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