搜索复制的值 MACRO
Search a copied value MACRO
我有两个 sheet:
数据库
宏sheet:它有一行日期将成为宏后table的标题。
Objective:在宏sheet中获取第一个日期的值并查找它在数据库中的位置sheet。然后,在数据库sheet中,复制与之前复制的日期对应的整个列。
我知道代码应该是这样的:
Sheets("Macro").Select
Range("K3").Select
Selection.Copy
Sheets("Database").Select
Cells.Find(What:=Selection.PasteSpecial xlValues, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Macro").Select
ActiveSheet.Paste
这段代码不行,因为搜索部分没做好,望指正
类似的东西。
阅读 this 了解不使用 Select 或 Activate 的优势。
使用 Find
时,请始终先检查您的搜索字词是否已找到,以避免出错。例如,您无法激活不存在的单元格。
Sub x()
Dim r As Range
With Sheets("Database")
Set r = .Cells.Find(What:=Sheets("Macro").Range("K3").Value, lookAt:=xlPart, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not r Is Nothing Then
Range(r, r.End(xlDown)).Copy Sheets("Macro").Range("A1")
End If
End With
End Sub
遍历宏工作表中的 header 日期。如果可以在数据库工作表的 header 行中找到任何内容,请将该列复制到 header 下的宏工作表。
sub getDateData()
dim h as long, wsdb as worksheet, m as variant, arr as variant
set wsdb = worksheets("database")
with worksheets("macro")
for h=1 to .cells(1, .columns.count).end(xltoleft).column
m = application.match(.cells(1, h).value2, wsdb.rows(1), 0)
if not iserror(m) then
arr = wsdb.range(wsdb.cells(2, m), wsdb.cells(rows.count, m).end(xlup)).value
.cells(2, h).resize(ubound(arr, 1), ubound(arr, 2)) = arr
end if
next h
end with
end sub
我有两个 sheet:
数据库
宏sheet:它有一行日期将成为宏后table的标题。
Objective:在宏sheet中获取第一个日期的值并查找它在数据库中的位置sheet。然后,在数据库sheet中,复制与之前复制的日期对应的整个列。
我知道代码应该是这样的:
Sheets("Macro").Select
Range("K3").Select
Selection.Copy
Sheets("Database").Select
Cells.Find(What:=Selection.PasteSpecial xlValues, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Macro").Select
ActiveSheet.Paste
这段代码不行,因为搜索部分没做好,望指正
类似的东西。
阅读 this 了解不使用 Select 或 Activate 的优势。
使用 Find
时,请始终先检查您的搜索字词是否已找到,以避免出错。例如,您无法激活不存在的单元格。
Sub x()
Dim r As Range
With Sheets("Database")
Set r = .Cells.Find(What:=Sheets("Macro").Range("K3").Value, lookAt:=xlPart, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Not r Is Nothing Then
Range(r, r.End(xlDown)).Copy Sheets("Macro").Range("A1")
End If
End With
End Sub
遍历宏工作表中的 header 日期。如果可以在数据库工作表的 header 行中找到任何内容,请将该列复制到 header 下的宏工作表。
sub getDateData()
dim h as long, wsdb as worksheet, m as variant, arr as variant
set wsdb = worksheets("database")
with worksheets("macro")
for h=1 to .cells(1, .columns.count).end(xltoleft).column
m = application.match(.cells(1, h).value2, wsdb.rows(1), 0)
if not iserror(m) then
arr = wsdb.range(wsdb.cells(2, m), wsdb.cells(rows.count, m).end(xlup)).value
.cells(2, h).resize(ubound(arr, 1), ubound(arr, 2)) = arr
end if
next h
end with
end sub