VBA使用列中找到的格式查找并替换工作表中找到的所有单元格

Posted

技术标签:

【中文标题】VBA使用列中找到的格式查找并替换工作表中找到的所有单元格【英文标题】:VBA Find and replace all cells found in worksheet with format found in column 【发布时间】:2014-04-02 17:32:16 【问题描述】:

我正在寻找一个 vba 代码 sn-p 来帮助我入门。

我的一个工作表中有一个包含值(非唯一)的列。在本专栏中,我需要

    将整个工作簿中所有找到的具有相同值的单元格替换为原始单元格中找到的格式或

    如果单元格没有背景颜色,则为其分配新的唯一颜色背景(唯一是基于列中先前的单元格)并查找并替换整个工作簿中的所有单元格使用此格式。

我不相信我可以使用条件格式,因为我有太多符合条件的单元格,这会使 excel 速度降低到无法接受的速度。

【问题讨论】:

大多数人会问的第一件事是您是否尝试过任何东西。我看到的第一个问题是只能制作 1660 万个 RGB 组合。一个工作簿有更多的单元格,并且从 240、95、0 到 241、95、0 的颜色差异非常小,以至于它们可能是相同的颜色。根据第一列中的值数量和工作簿中使用的单元格数量,这可能需要一段时间才能运行。 感谢您的回复。一列是后面出现的工作表的图例的一部分。我不相信我会在图例列中有这么多不同的值。我可以遍历列并使用代码 sn-ps 来查找和替换,但我还没有弄清楚如何为 col 中的每个唯一条目创建新的唯一颜色。如果在宏中它可以运行很长时间。我只想成为触发函数调用的人,而不是一直以来的条件格式。 如果您的第一列没有唯一值,那么您如何知道要选择哪种背景颜色?例如,如果 A1 的值为 10 并且是橙色,但 A23 的值为 10 并且是粉红色。 你可以使用.Find来实现你想要的吗?看看THIS 是否有帮助 您尝试搜索多少个这样的值并更改单元格的背景颜色? 10? 20? 100? 【参考方案1】:

好吧,根据之前的 cmets,这是我目前所拥有的。

Sub FormatFill()
Dim sRng As Range
Dim cCell As Range
Dim nCell As Range
Dim bClr, lVal
     Application.ScreenUpdating = False
     Range("B1").Select
     Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
     Set sRng = Selection
     'Fill all legend formats
     Range("A1").Select
     Range(Selection, Selection.End(xlDown)).Select
     For Each cell In Selection
         lVal = cell.Value
         bClr = cell.Interior.Color
         Set cCell = sRng.Find(What:=lVal, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
         SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
         If Not cCell Is Nothing Then
             Set nCell = cCell
                 Do
                      cCell.Interior.Color = bClr
                      Set cCell = sRng.FindNext(After:=cCell)
                      If Not cCell Is Nothing Then
                            If cCell.Address = nCell.Address Then Exit Do
                      Else
                            Exit Do
                      End If
                 Loop
        End If
    Next
Application.ScreenUpdating = True
End Sub

我仍在研究如何为工作簿其余部分的其他值捕获和分配唯一颜色。

【讨论】:

以上是关于VBA使用列中找到的格式查找并替换工作表中找到的所有单元格的主要内容,如果未能解决你的问题,请参考以下文章

从 Excel 调用 VBA 函数 - 在选定工作表上的选定列中查找

如何使用 VBA 在 Excel 注释中查找和替换日期格式

在表列中查找值并返回表行号 - VBA

在EXCEL中 如何用VBA查找某特定单元格并返回该单元格的行和列值?

如果它们与使用 vba 的条件匹配,则在列中查找最小值和中值

Excel VBA代码查找列中的最大单元格值并删除其下方的所有行