根据标题行Excel复制列格式

我想复制excel工作表的顶行的格式,选定的单元格下每个选定的列。

  • 我不能在目标单元格中​​使用条件格式或任何公式,因为它们已包含数据和不同的条件格式化公式。
  • 整列被分组。 随着时间的推移,我可能会改变分组的水平,并不想重新格式化整个工作表…最上面的一行背景颜色有条件格式应用..使用下面的公式。

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

所以在这个例子中,行1组1级的单元背景是橙色,级2是蓝色,L3是绿色。 (条件格式规则=OutlineLev(CELL("col",D1))=3

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

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

在这里输入图像描述

如果你添加这个代码

 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 

请注意,只有当单元格发生更改时,才会通过更改某个单元格的背景颜色来直接触发此事件。 在你的情况下,这可能已经足够了,但是由于你忘了告诉我们你的第一行是如何格式化的,我只能猜测。

编辑:您的评论:没有必要硬编码的范围规格,上面只是一个例子来演示如何复制格式。

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

 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 

你可能不得不限制/适应你的实际工作表中的行/列,但我希望你能得到一般的想法。

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

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

然后,您可以select整个列并应用您想要的整个列的任何格式。 条件公式最后应用,所以黑色的行#2保持不变。

如果您只想为整列设置背景,那么只需设置该属性,然后更改第一行的单元格的字体颜色即可

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

仅供参考 – 如果您只想让行#2上的黑色条延伸使用的列的宽度(而不是整个工作表的宽度),则在select整个工作表之前select单元格A1,然后使用公式=and(row()=2,a$1<>"")作为条件公​​式。