首页 > 解决方案 > Excel 2010 VBA:如何将一行粘贴到一系列行并保持逐行条件格式

问题描述

Excel 2010:

这个问题特别涉及使用PasteSpecial with Conditional Formatting

概述: 我有一个模板行存储在不同的工作表中。这一行包含大约 350 列和多种格式、公式和条件格式。

数据从 SQL Server 加载并包含 N 行 - 通常在 400 到 15000 之间。

做法:

我复制模板行并插入需要数字行:

AryVariant = rst_ADODB.GetRows
lRecordCount = UBound(AryVariant, 2) + 1

Templates.Range("TEMPLATE_ROW").Copy
sheet1.Range(sheet1.Range("Range_Start").Offset(1, 0), sheet1.Range("Range_Start").Offset(lRecordCount, 0)).EntireRow.Insert Shift:=xlDown

从这样的另一张表复制到一个范围内会使公式和条件格式变得一团糟,但可以很好地复制单元格格式,所以我然后返回该范围以更新公式和条件格式:

Templates.Range("TEMPLATE_ROW").Copy
sheet1.Range(sheet1.Range("Range_Start").Offset(1, 0), sheet1.Range("Range_Start").Offset(lRecordCount, 0)).EntireRow.PasteSpecial xlPasteFormats

问题:

虽然这适用于公式,但它会在“应用于”部分中合并条件格式的行,同时将公式留在引用范围内顶行的规则中。示例(不确定如何显示这部分,因为我无法上传图片):

公式: “=$FB18”

格式: 这里有一些格式

适用于: “=$D$18:$M$11436,$O$18:$AC$11436”

期望的结果:

我想要的是每一行都是独立的,所以:

公式: “=$FB18”

格式: 这里有一些格式

适用于: “=$D$18:$M$18,$O$18:$AC$18”

公式: “=$FB19”

格式: 这里有一些格式

适用于: “=$D$19:$M$19,$O$19:$AC$19”

解决方法:

目前我正在逐行应用 PasteSpecial 作为解决方法:

For r = 0 To UBound(AryVariant, 2)
    Templates.Range("TEMPLATE_ROW").Copy
    sheet1.Range("sheet1_Dataset").Offset(r + 1, 0).EntireRow.PasteSpecial xlPasteFormats
Next r

虽然这可行,但对于大型数据集,它的速度非常慢。

最后,问题:

有没有办法在将格式应用于整个范围时获得所需的结果?

标签: excelvbaexcel-2010conditional-formatting

解决方案


推荐阅读