我有一个表格,其数值基于每月和第1栏中的产品,如下所示(Say" sheet1")。此表具有条件格式,用于根据目标突出显示红色/黄色/绿色的单元格颜色。因此,我想只采取特定月份(当月 - 5月)列,并希望VBA检查,如果该列中的任何单元格为红色,则选择整行并将其复制到另一个表格中,例如" Sheet2&# 34;带标题。
Product = Target Feb Mar Apr May
Wood >= 5 10 10 10 10
wood >= 5 28 28 28 28
Tree >= 12 30 45 60 68
plastic >= 45 50 50 50 50
tree >= 50 50 50 50 50
iron >= 100 64 75 75 80
值会每月更改,有时甚至会定位,因此有时颜色可能会完全变为绿色/黄色/红色。所以,我想使用VBA自动化这个过程,去检查" Sheet1"每个月都会拉出那个月份突出显示红色单元格的行。或者甚至按钮功能也可以提供帮助,因此我可以将此宏指定给一个按钮,此操作应该通过单击按钮来完成。即使它也应该清除Sheet2中较早月份的所有行,这些行可能在上个月突出显示,但在本月没有突出显示。
我尝试过不同的方法来做到这一点,它没有认识到细胞的颜色。当我使用表格中的随机/常规单元格并填充红色并使用find(ctrl + f)弹出框突出显示使用颜色格式时,它正在工作,但它没有采用在表格中具有条件格式的单元格。所以,我不知道是否有办法识别表格中使用VBA以红色突出显示的所有单元格。
答案 0 :(得分:1)
INPUT(在WORKSHEET1中):
输出(工作单2):
Sub newnew()
声明工作表,应更改Sheet2和Sheet3以匹配工作表名称
Dim ws As Worksheet
Set ws = Sheets("Sheet2")
Dim wsTwo As Worksheet
Set wsTwo = Sheets("Sheet3")
清除wsTwo中的先前数据
wsTwo.Cells.Clear
找到包含
内数据的ws的最后一行和一列
Dim lastRow As Integer
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Dim lastColumn As Integer
lastColumn = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
我们在这里设置标题
ws.Range("A1:F1").Copy
wsTwo.Range("A1:F1").PasteSpecial xlPasteAll
Application.CutCopyMode = False
从最后一行开始我们的循环并向上移动直到我们到达第2行。我们正在检查rowNum和lastColumn显示格式内部颜色是否为红色。如果它是我们正在采取该范围,复制它,然后粘贴在wsTwo。请注意,我们在进入for循环之前设置了rowCounter。我们会将其用作占位符,每次粘贴两次都会增加,这样我们就不会粘贴我们刚刚粘贴的数据。
Dim rowCounterWsTwo As Integer
rowCounterWsTwo = 2
For rowNum = lastRow To 2 Step -1
If Cells(rowNum, lastColumn).DisplayFormat.Interior.Color = vbRed = vbRed Then
ws.Range(Cells(rowNum, 1), Cells(rowNum, lastColumn)).Copy
wsTwo.Range("A2:F2").Insert
Application.CutCopyMode = False
rowCounterWsTwo = rowCounterWsTwo + 1
End If
Next rowNum
End Sub