如果单元格在Excel中具有红色/绿色/黄色,则复制粘贴整行

时间:2018-05-16 20:55:37

标签: excel vba excel-vba

我有一个表格,其数值基于每月和第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以红色突出显示的所有单元格。

1 个答案:

答案 0 :(得分:1)

INPUT(在WORKSHEET1中):

MyImage

输出(工作单2):

MyImage

    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