2

我想将 excel 表顶行的格式复制到每个选定列的选定单元格。

  • 我不能在目标单元格中​​使用条件格式或任何公式,因为它们已经包含数据和不同的条件格式公式。
  • 整列被分组。随着时间的推移,我可能会更改分组级别并且不想重新格式化整个工作表......顶行背景颜色应用了条件格式......使用以下公式。

    Function OutlineLev(inp As Integer) As Integer
    OutlineLev = Columns(inp).OutlineLevel
    End Function
    

因此在示例中,第 1 行组级别 1 上的单元格背景为橙色,级别 2 为蓝色,L3 为绿色。(条件格式规则 =OutlineLev(CELL("col",D1))=3

  • 您可以看到第 2 行(黄色单元格)没有内容。最初我以为我会在该单元格中有一个公式,将顶行的格式复制到每列中的其他行...

本质上。我正在寻找一个宏/函数/公式,它将以某种方式复制顶行的背景(例如示例中的单元格 D1)。向下到列的其余部分(范围(例如 D3:D9)。

在此处输入图像描述

4

2 回答 2

2

为整列设置格式将导致文件大小更小。为整列设置格式,然后使用条件格式规则覆盖第 2 行的格式,这似乎是一种更好的方法。这样您就可以完全避免使用 VBA,并且您的格式规则适用于整个列或整个工作表,这是最佳的。

选择整个工作表并创建一个使用公式的条件格式规则=row()=2并将其设置fillblack.

然后,您可以选择一整列并应用您想要的整列的任何格式。最后应用条件公式,因此黑色行#2 保留。

如果您只想为整列设置背景,那么只需设置它,然后仅更改 #1 行上的单元格的字体颜色...

最后它的工作量是相同的,因为您必须设置单元格的格式并运行宏,或者设置列的设置并更改顶部单元格的字体颜色......

仅供参考 - 如果您只想使第 2 行上的黑条扩展所用列的宽度(而不是整个工作表的宽度),则在选择整个工作表之前选择单元格 A1 并使用=and(row()=2,a$1<>"")条件公式的公式.

于 2012-09-13T15:26:49.353 回答
2

如果您添加此代码

Sub ApplyFormatting()
    CopyFormat Range("A3:A10"), Range("A1")
    CopyFormat Range("B3:B10"), Range("B1")
    CopyFormat Range("C3:C10"), Range("C1")
    CopyFormat Range("D3:D10"), Range("D1")
End Sub

Sub CopyFormat(dest As Range, copyfrom As Range)
    dest.Interior.Color = copyfrom.Interior.Color
End Sub

在工作表的代码区域,您有一个简单的工具,几乎可以满足您的需求。唯一的事情是你必须在ApplyFormatting某处调用子程序。例如,如果第一行的颜色取决于同一工作表某处某些单元格的值,则可以使用该工作表的 Worksheet_Change 事件:

Private Sub Worksheet_Change(ByVal Target As Range)
    ApplyFormatting
End Sub

请注意,此事件不会直接由某些单元格的背景颜色更改触发,仅当单元格更改时才会触发。在您的情况下,这可能就足够了,但是由于您忘记告诉我们您的第一行是如何精确格式化的,我只能猜测。

编辑:对您的评论:无需对范围规范进行硬编码,以上只是演示如何复制格式的示例。

将其应用于整个工作表的解决方案将如下所示:

Sub ApplyFormatting()
    Dim maxRow As Long, maxCol As Long, col As Long
    maxRow = Cells.SpecialCells(xlCellTypeLastCell).Row
    maxCol = Cells.SpecialCells(xlCellTypeLastCell).Column
    For col = 1 To maxCol
        CopyFormat Range(Cells(3, col), Cells(maxRow, col)), Cells(1, col)
    Next
End Sub

您可能必须将其限制/调整到实际工作表中的行/列,但我希望您能大致了解。

于 2012-09-13T19:29:45.797 回答