【问题标题】:Copy a Column Format based on header row Excel根据标题行 Excel 复制列格式
【发布时间】:2012-09-06 17:32:36
【问题描述】:

我想将 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)。

【问题讨论】:

    标签: excel excel-formula vba


    【解决方案1】:

    如果添加此代码

    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
    

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

    【讨论】:

    • 感谢您的回复,这很有效!但是我会将其应用于许多记录,并且不想将单元格范围硬编码到函数中。数据太动态了。
    • 谢谢!...正是我要找的!...唯一的问题是,在我的工作表上这不起作用,(我认为这与事实有关引用的单元格是基于一个公式来确定它们的内部颜色)......无论如何,谢谢!
    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

    • 我希望列格式是动态的,所以我不想手动设置格式。原因是单元格 A2 将根据单独的公式更改格式(该公式链接到列的组级别。所以这不起作用*(除非我没有正确理解)
    • 要复制到列的其余部分的背景是如何设置的?你的插图和你的问题没有提到这一点,也没有提到“小组级别”。你能澄清一下吗?如果“组级别”是第 1 行,如何设置第 1 行的格式以便可以复制?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    相关资源
    最近更新 更多