根据标题行Excel复制列格式

时间:2012-09-13 15:13:44

标签: excel excel-vba excel-formula vba

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

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

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

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

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

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

enter image description here

2 个答案:

答案 0 :(得分: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

您可能必须将其限制/调整为实际工作表中的行/列,但我希望您能够获得一般性的想法。

答案 1 :(得分:1)

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

选择整个工作表并创建使用公式=row()=2的条件格式设置规则,并将fill设置为black

然后,您可以选择整个列并应用所需的整列的任何格式。条件公式最后应用,因此黑色行#2仍然存在。

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

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

仅供参考 - 如果您只想使第2行上的黑条扩展所用列的宽度(而不是整个工作表的宽度),则在选择整个工作表之前选择单元格A1并使用公式{ {1}}用于条件公式。