我有一个工作表,在A列中有很多术语。我想搜索两个术语,例如 术语A和术语B并复制两个术语之间的所有行并将其粘贴到新的表中。这两个术语可能在列中重复。我基本上面临以下问题的问题:每当我运行我的代码时,它也会复制术语B和术语A之间的行,这是不必要的。以下是我用于两个术语A和B的代码。 例如,我的专栏A是
研究所 事件 工作 电脑 笔记本电脑 数据 事件 数据 格式 计算机
以及更多条款 我想复制术语A:事件和术语B:笔记本电脑之间的所有行并将其粘贴到新工作表中。我的代码正在做的是在事件和计算机的所有组合之间复制行。甚至复制计算机和事件之间的行(在本例中为图和笔记本电脑)。
Sub OpenHTMLpage_SearchIt()
Dim Cell As Range, Keyword$, N%, SearchAgain As VbMsgBoxResult
Dim ass As Variant
Dim Cellev As Range, prakash$, P%, SearchAgaina As VbMsgBoxResult
Dim asa As Variant
StartSearch:
N = 1
Keyword = "Event"
If Keyword = Empty Then GoTo StartSearch
For Each Cell In Range("A1:A500")
If Cell Like "*" & Keyword & "*" Then
ass = Cell.Address
P = 1
prakash = "Computer"
If prakash = Empty Then GoTo StartSearch
For Each Cellev In Range("A1:A500")
If Cellev Like "*" & prakash & "*" Then
asa = Cellev.Address
Range(asa, ass).Select
Selection.Copy
Sheets.Add After:=Sheets(Sheets.Count)
Range("B13").Select
ActiveSheet.Paste
Worksheets("sheet1").Select
P = P + 1
End If
Next Cellev
N = N + 1
End If
Next Cell
End Sub
编辑:代码格式化。
答案 0 :(得分:1)
试试这个:
Sub DoEeeeeet(sheetName, termA, termB)
Dim foundA As Range, _
foundB As Range
Dim newSht As Worksheet
With Sheets(sheetName).Columns(1)
Set foundA = .Find(termA)
If Not foundA Is Nothing Then
Set foundB = .Find(termB, after:=foundA, searchdirection:=xlPrevious)
End If
End With
If foundA Is Nothing Or foundB Is Nothing Then
MsgBox "Couldn't find " & IIf(foundA Is Nothing, termA, termB)
Else
Range(foundA, foundB).Copy
Set newSht = Sheets.Add
newSht.Range("B13").PasteSpecial
End If
End Sub
您可以按如下方式调用它:
DoEeeeeet "Sheet1","Event","Laptop"
它将在名为“Sheet1”的工作表上找到“Event”的第一个实例和“Laptop”的最后一个实例,并将所有数据复制到新工作表中的B13和后续单元格。
这就是你想要的吗?或者您希望每个子范围以“事件”开头并以“笔记本电脑”结尾?
答案 1 :(得分:1)
以下是适用于我的代码。这会将事件和笔记本电脑之间的所有内容复制并粘贴到新工作表中。然后再次搜索第二次,这次搜索将从下一行开始到第一次搜索。我希望我对此很清楚。
Sub Star123()
Dim rownum As Long
Dim colnum As Long
Dim startrow As Long
Dim endrow As Long
Dim lastrow As Long
rownum = 1
colnum = 1
lastrow = Worksheets("Startsheet").Range("A65536").End(xlUp).Row
With ActiveWorkbook.Worksheets("StartSheet").Range("a1:a" & lastrow)
For rownum = 1 To lastrow
Do
If .Cells(rownum, 1).Value = "Event" Then
startrow = rownum
End If
rownum = rownum + 1
If (rownum > lastrow) Then Exit For
Loop Until .Cells(rownum, 1).Value = "Laptop"
endrow = rownum
rownum = rownum + 1
Worksheets("StartSheet").Range(startrow & ":" & endrow).Copy
Sheets("Result").Select
Range("A1").Select
ActiveSheet.Paste
Next rownum
End With
End Sub