【问题标题】:Replace cell fill color based on existing cell fill color in a column根据列中现有的单元格填充颜色替换单元格填充颜色
【发布时间】:2017-01-05 01:59:42
【问题描述】:

我附上了屏幕截图以可视化我正在尝试做的事情。

我正在尝试根据现有的单元格填充颜色替换“昨天”列中单元格的填充颜色。

我看到了根据单元格中的值替换颜色的示例,但我认为我有不同的情况。

【问题讨论】:

    标签: excel vba macros background-color cells


    【解决方案1】:

    也许这可以帮助你:

    Option Explicit
    
    Public Sub main()
        Dim cell As Range, foundCells As Range
        Dim yesterdayColor As Long, todayColor As Long
    
        yesterdayColor = Range("H3").Interior.Color
        todayColor = Range("H4").Interior.Color
    
        With Range("B5:B17") '<--| reference wanted range of which coloring any "yesterdayColor" colored cells with "todayColor" color
            Set foundCells = .Offset(, .Columns.Count).Resize(1, 1) '<-- initialize a dummy "found" cell outside the relevant range and avoid 'IF' checking in subsequent 'Union()' method calls
            For Each cell In .Cells '<--| loop through referenced range cells
                If cell.Interior.Color = yesterdayColor Then Set foundCells = Union(foundCells, cell) '<--| gather yesterday colored cells together
            Next cell
            Set foundCells = Intersect(.Cells, foundCells) '<--| get rid of the dummy "found" cell
        End With
        If Not foundCells Is Nothing Then foundCells.Interior.Color = todayColor '<--| if any cell has been found then change their color
    End Sub
    

    【讨论】:

    • 感谢您的回答,为了避免混淆,我附上了我的实际工作表i.stack.imgur.com/BuiFc.jpg 这个工作表应该可以帮助我跟踪任何活动的进度。当我根据日期打开电子表格时,特定列会突出显示。我已经使用条件格式和 today() 函数来实现这一点。下一步是填充前一天的单元格颜色,但仅限于活动广告系列。
    • 此代码有效! :) 惊人的。新的屏幕截图突出显示了今天=2016 年 8 月 30 日的列。我只想为前一天/昨天=2016 年 8 月 29 日的列进行单元格填充着色。可以合并@user3598756
    • 根据本网站规则 1) 既然我完成了您的 original 问题,请将我的回答标记为已接受,谢谢。 2) 为新问题发新帖
    • 再次感谢。将发布另一个问题
    • 有时间可以看看我的第二个问题linkstackoverflow.com/questions/39239439/…吗?谢谢
    【解决方案2】:

    编辑:试试这个。

    Public Sub ChangeCellColors()
      Dim rngTarget As Excel.Range: Set rngTarget = Range("H3")
      Dim rngSource As Excel.Range: Set rngSource = Range("H4")
      Dim rngCell As Excel.Range
    
      For Each rngCell In Range("B4:B17")
        With rngCell.Interior
          If rngCell.Interior.Color = rngTarget.Interior.Color Then
            .Pattern = rngSource.Interior.Pattern
            .PatternColorIndex = rngSource.Interior.PatternColorIndex
            .Color = rngSource.Interior.Color
            .TintAndShade = rngSource.Interior.TintAndShade
            .PatternTintAndShade = rngSource.Interior.PatternTintAndShade
          End If
        End With
      Next rngCell
    
      Set rngSource = Nothing
      Set rngTarget = Nothing
      Set rngCell = Nothing
    End Sub
    

    【讨论】:

    • 感谢 MJH,这段代码 sn-p 几乎可以让我到达那里。在我的工作表中,我使用(条件语句和今天()函数)突出显示了今天的列。是否可以自动选择“昨天”列来执行此单元格填充颜色替换?谢谢
    • 嗨 MJH,宏正在将“昨天”列中的所有单元格替换为单元格“H4”中的颜色。有什么想法吗?
    • 关于您的第一条评论,抱歉,我不明白。 “我使用(条件语句和今天()函数)突出显示了今天的列”是什么意思?而且,您是否正在寻找比Range("B5:B17") 更灵活的东西,也许是因为该范围不是静态的?关于第二条评论,我认为这就是您想要的。
    • @MJM 感谢您的回答,为了避免混淆,我附上了我的实际工作表 i.stack.imgur.com/BuiFc.jpg 该工作表应该可以帮助我跟踪任何活动的进度。当我根据日期打开电子表格时,特定列会突出显示。我已经使用条件格式和今天()函数来实现这一点。下一步是填充前一天的单元格颜色,但仅适用于活动的广告系列。
    • 谢谢,但新的屏幕截图无助于解释您在使用我提供的代码时遇到的问题。该代码确实按照您的要求执行,即“根据现有的单元格填充颜色替换'昨天'列中单元格的填充颜色”。如果您修改了它,请提供您正在运行的确切代码,以及它如何不适合您。换句话说,在运行代码之前提供有关工作表外观的详细信息、代码运行后您期望的结果以及您得到的结果。
    猜你喜欢
    • 1970-01-01
    • 2017-06-05
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2018-04-11
    • 2015-11-01
    • 2015-08-09
    相关资源
    最近更新 更多