如何使用特定单词在excel中复制一行并粘贴到另一张excel工作表?
我检查了很多不同的帖子,似乎找不到我要找的确切代码。此外,我以前从未使用过VBA,所以我尝试从其他帖子中获取代码,并输入我的信息以使其工作。还没有运气。在工作中,我们有一个Excel的工资系统。我正在尝试搜索我的名字如何使用特定单词在excel中复制一行并粘贴到另一张excel工作表?,excel,vba,Excel,Vba,我检查了很多不同的帖子,似乎找不到我要找的确切代码。此外,我以前从未使用过VBA,所以我尝试从其他帖子中获取代码,并输入我的信息以使其工作。还没有运气。在工作中,我们有一个Excel的工资系统。我正在尝试搜索我的名字“Clarke,Matthew”,然后复制该行并将其粘贴到我保存在桌面上的工作簿“Total hours”扩展timrau在其评论中所说的内容,您可以使用自动筛选功能查找包含您姓名的行。(请注意,我假设您打开了源工作簿) 正如您所看到的,我为您的工作簿的特定设置添加了占位符。经过尝试
“Clarke,Matthew”
,然后复制该行并将其粘贴到我保存在桌面上的工作簿“Total hours”
扩展timrau在其评论中所说的内容,您可以使用自动筛选功能查找包含您姓名的行。(请注意,我假设您打开了源工作簿)
正如您所看到的,我为您的工作簿的特定设置添加了占位符。经过尝试和测试。
Sub Sample()
Dim wb1 As Workbook, wb2 As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
Dim copyFrom As Range
Dim lRow As Long '<~~ Not Integer. Might give you error in higher versions of excel
Dim strSearch As String
Set wb1 = ThisWorkbook
Set ws1 = wb1.Worksheets("yourSheetName")
strSearch = "Clarke, Matthew"
With ws1
'~~> Remove any filters
.AutoFilterMode = False
'~~> I am assuming that the names are in Col A
'~~> if not then change A below to whatever column letter
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
With .Range("A1:A" & lRow)
.AutoFilter Field:=1, Criteria1:="=*" & strSearch & "*"
Set copyFrom = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
End With
'~~> Remove any filters
.AutoFilterMode = False
End With
'~~> Destination File
Set wb2 = Application.Workbooks.Open("C:\Sample.xlsx")
Set ws2 = wb2.Worksheets("Sheet1")
With ws2
If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
lRow = .Cells.Find(What:="*", _
After:=.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
Else
lRow = 1
End If
copyFrom.Copy .Rows(lRow)
End With
wb2.Save
wb2.Close
End Sub
子样本()
将wb1设置为工作簿,将wb2设置为工作簿
将ws1标注为工作表,将ws2标注为工作表
从As范围变暗复制
只要“我假设这些名字都是A列的”就可以了
“~~>如果不是,则将下面的A更改为任何列字母
lRow=.Range(“A”&.Rows.Count).End(xlUp).Row
带.Range(“A1:A”和lRow)
.AutoFilter字段:=1,标准1:=“=*”&strSearch&“*”
设置copyFrom=.Offset(1,0).SpecialCells(xlCellTypeVisible).EntireRow
以
“~~>删除任何筛选器
.AutoFilterMode=False
以
“~~>目标文件
设置wb2=Application.Workbooks.Open(“C:\Sample.xlsx”)
设置ws2=wb2.工作表(“表1”)
与ws2
如果Application.WorksheetFunction.CountA(.Cells)为0,则
lRow=.Cells.Find(内容:=“*”_
之后:=.范围(“A1”)_
看:=xlPart_
LookIn:=xl公式_
搜索顺序:=xlByRows_
搜索方向:=xlPrevious_
MatchCase:=False)。行
其他的
lRow=1
如果结束
copyFrom.Copy.Rows(lRow)
以
wb2.保存
wb2.关闭
端接头
快照
我知道这很古老,但对于其他正在寻找如何实现这一点的人来说,这可以用更直接的方式实现:
Public Sub ExportRow()
Dim v
Const KEY = "Clarke, Matthew"
Const WS = "Sheet1"
Const OUTPUT = "c:\totalhours.xlsx"
Const OUTPUT_WS = "Sheet1"
v = ThisWorkbook.Sheets(WS).Evaluate("index(a:xfd,match(""" & KEY & """,a:a,),)")
With Workbooks.Open(OUTPUT).Sheets(OUTPUT_WS)
.[1:1].Offset(.[counta(a:a)]) = v
.Parent.Save: .Parent.Close
End With
End Sub
如果您在单个列中搜索关键字(例如,所有“
Clarke,Matthew
”都在a列),那么Excel的筛选功能应该可以工作。也许发布您的搜索结果会给我们提供更好的帮助。你也可以研究一下VLOOKUP
函数。看看这个修改它以满足你的需要:)或者这个@SiddharthRout你对这个问题的回答对我来说很有用。从谷歌到工作宏在2分钟内,你的链接尽管ActiveSheet.AutoFilter.Range.Offset(1).Copy
这样做不正确:)请查看我在评论中发布的两个链接。@Siddharth我发现AutoFilter.Range
工作正常SpecialCells(xlCellTypeVisible)
也应该可以工作,但是我在返回空白单元格时遇到了一些问题。对于所有反馈,都返回.TY。我正试图使用第二个宏,但现在在这一行收到一条错误消息。自动筛选字段:=1,标准1:=“=*”&strearch&“*”。。。。告诉我“运行时错误1004:范围的自动筛选方法失败”。有什么建议吗?你在这里设置了什么与.Range(“A1:A”&lRow)
?我保留了相同的设置,然后我尝试了A1:A50,假设它表示A列第1-50行的范围。仍然没有运气。。我刚刚意识到这张表是受保护的,现在当我试图在那张表上运行宏时,它说我不能。还有别的办法吗?我不确定这些表格是否允许使用宏。我该如何发送或发布它?我怀疑我能从这些电脑上找到答案。我还使用一个未受保护的启用宏的文件运行了宏,它确实起了作用。当我试图在其他受保护的文件上使用相同的宏时,我会遇到一个错误,我需要取消对它的保护才能这样做。您没有该工作表的密码吗?
Public Sub ExportRow()
Dim v
Const KEY = "Clarke, Matthew"
Const WS = "Sheet1"
Const OUTPUT = "c:\totalhours.xlsx"
Const OUTPUT_WS = "Sheet1"
v = ThisWorkbook.Sheets(WS).Evaluate("index(a:xfd,match(""" & KEY & """,a:a,),)")
With Workbooks.Open(OUTPUT).Sheets(OUTPUT_WS)
.[1:1].Offset(.[counta(a:a)]) = v
.Parent.Save: .Parent.Close
End With
End Sub