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