我有一张带有值的Excel工作表,我想自动仅将突出显示的值(使用背景颜色格式化)复制到另一个工作表。 我不介意使用宏,或者如果可能的话,在第二个单元格中使用函数。
我试图将一些建议放在一起并创建一个函数来返回单元格颜色,然后按照颜色值过滤下面的宏:
Sub Sample()
Dim ws As Worksheet
Dim strSearch As String
Dim lRow As Long
Set ws = Sheets("Sheet1")
With ws
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
'~~> Remove any filters
.AutoFilterMode = False
'~~> Filter, offset(to exclude headers) and set the source location
With .Range("J2:J" & lRow)
.AutoFilter Field:=1, Criteria1:="6"
Set copyFrom = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
End With
'~~> Remove any filters
.AutoFilterMode = False
End With
'~~> Destination Sheet
Set ws2 = Sheets("Sheet2")
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
End Sub
Function InteriorColor(CellColor As Range)
InteriorColor = CellColor.Interior.ColorIndex
End Function
但是,我需要从多张工作表复制到单张工作表,并且宏指出源工作表是常量...我不想为每张单独的工作表创建一个宏。
此外,每次我将运行宏时,它将复制已经复制的高亮显示的行,从而在目标表中创建重复项。
我已经查看了很多有关此问题的SO帖子,但找不到任何符合我需求的帖子。
有人可以建议如何更改此代码或使用新的优化代码吗?
提前谢谢!
答案 0 :(得分:0)
首先,我认为这应该分为两个问题:
如果要从不同工作表导入,则应编写函数以接受工作表作为参数。
Sub Sample(ws As Excel.Worksheet)
然后您需要删除行Dim ws As Worksheet
和Set ws = Sheets("Sheet1")
,否则您将收到错误或意外行为。
然后你需要另一个循环遍历所有工作表并调用 Sample(Worksheet)过程的函数。
Sub SampleCaller()
dim e, ws as Excel.Worksheet
For Each e in ThisWorkbook.Sheets
Set ws = e
Call Sample(ws)
Next e
Set ws = Nothing
End Sub
您已使用Range.Find method (Link)
您可以使用它来查找目标工作表中已有的元素
在调用copyFrom.Copy .Rows(lRow)
之前,您应该使用Range.Find来确定是否需要复制此值。
也许您应该为第二个问题创建另一个主题,或者使用搜索功能。