在一个宏中复制普通和数组公式

时间:2016-06-23 06:39:35

标签: excel excel-vba macros vba

我有以下Excel表格:

     A                 B                    C                    D                       E
1                     Purchase Price        Sales Price      Purchase Price > Sales Price
2     Product A            50                    40        ={COUNT(IF(ISNUMBER(B2:B10),IF(B2:B10>C2:C10-10,B2:B10)))}
3     Product B            60                    65
4     Product C            80                    60
5     Product D            10                    20
6     Product E            50                    30
7                      =If(A7="";"";60)

现在我想使用以下宏将公式从单元格B2:D7复制到单元格E2:G7:

Sub Copy_Option_01 ()
Sheets("Tabelle1").Range("B2:D7").Copy
Sheets("Tabelle1").Range("E2:G7").PasteSpecial xlFormulas
Application.CutCopyMode = False
End Sub

此宏将公式从单元格B2:D7复制到单元格E2:G7中。但是,它也会改变单元格的引用,例如它将单元格B7和D2中的公式更改为:

B7    =If(D7="";"";60)
D2    ={COUNT(IF(ISNUMBER(E2:E10);IF(E2:E10>F2:F10-10;E2:E10)))}

我希望实现细胞的参考不会改变,并且它们保持在细胞B7和D2的公式中。因此,我尝试使用以下宏:

Sub Copy_Option_02 ()
Sheets("Tabelle1").Range("E2:G7").Formula = Sheets("Tabelle1").Range("B2:D7").Formula
End Sub

此宏将公式从单元格B2:D7复制到单元格E2:E7中,并且不会更改单元格的引用。但是,它也不会复制单元格D2中数组公式的{}。

你们是否知道我可以使用哪种宏

(1)复制单元格的单元格引用不会改变,(2)单元格D2中数组公式的{}也被复制。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您必须将原始公式更改为具有绝对列引用。

  

= COUNT(IF(ISNUMBER($ B2:$ B10),IF($ B2:$ B10> $ C2:$ C10-10,$ B2:$ B10)))

将公式更改为FormulaArray

Sheets("Tabelle1").Range("E2:G7").FormulaArray = Sheets("Tabelle1").Range("B2:D7").Formula