我试图保存一个单元格地址并在公式中使用它,但我最终得到一个#value错误。 任何人都可以解释如何在变量中正确存储单元格地址或值,然后在公式中使用其中一个或两个。
在这里尝试单元格值和地址, 这是我的代码:
Dim CellA1 As String
Dim CellA2 As String
Dim CellV1 As Single
Dim CellV2 As Single
Range("D20").Select
ActiveCell.Offset(2, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=SUM(R16C:R[-2]C)"
CellA1 = ActiveCell.Address
CellV1 = ActiveCell.Value
ActiveCell.Offset(-1, -1).Range("A1").Select
ActiveCell.FormulaR1C1 = "=SUM(R16C:R[-1]C)"
CellA2 = ActiveCell.Address
CellV2 = ActiveCell.Value
ActiveCell.Offset(0, -1).Range("A1").Select
ActiveCell.FormulaR1C1 = "Total Panel Quantity"
Selection.Font.Bold = True
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "Total Cost Price"
Selection.Font.Bold = True
ActiveCell.Offset(2, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "Overheads(%)"
ActiveCell.Offset(0, 4).Range("A1").Select
ActiveCell.FormulaR1C1 = "=Product(" & CellV1 & ",RC[-3])"
更新:
产品公式是给出总成本价格的百分比(单元格D22和C24)。 但是这些单元格没有固定并向下移动,因为我在列表中添加了更多项目。
由于@AJD,使用公式中的单元格值可以在上面的代码中正常工作 但我更喜欢在公式中使用单元格地址。 是否有不同的存储和使用地址或值的方法?
答案 0 :(得分:0)
使用Cell Value可以使用:
ActiveCell.FormulaR1C1 = "=Product(" & CellV1 & ",RC[-3]%)"
如何在Cell地址中使用相同的公式?
答案 1 :(得分:0)
使用Active和Select会使我的眼睛灼伤。我也整理了一点代码。但是,最后一行应该回答你的问题。或者您可以使用之前保存的CellA1
。 Product
的Excel帮助表明这是正确的格式,但我还没有测试过。
Dim CellA1 As String
Dim CellA2 As String
Dim CellV1 As Single
Dim CellV2 As Single
Dim Rng as Range
'Set Rng = Range("D20").Offset(2, 0).Range("A1") ' Which worksheet?
Set Rng = Range("D22")
Rng.FormulaR1C1 = "=SUM(R16C:R[-2]C)"
CellA1 = ActiveCell.Address
CellV1 = ActiveCell.Value
'Set Rng = Rng.Offset(-1, -1)
Set Rng = Range("C21")
Rng.FormulaR1C1 = "=SUM(R16C:R[-1]C)"
CellA2 = ActiveCell.Address
CellV2 = ActiveCell.Value
'Set Rng = ActiveCell.Offset(2, 0)
Set Rng = Range("C23")
Rng.FormulaR1C1 = "Overheads(%)"
'Set Rng = Rng.Offset(0, 4)
Set Rng = Range("G23")
Rng.FormulaR1C1 = "=Product(" & CellV2 & ",RC[-3]%)"
' you have not specified which Cell address you wish to use.
' the following is an example where it can self reference.
'Rng.FormulaR1C1 = "=Product(" & Rng.AddressR1C1 & ",RC[-3]%)" ' don't mix relative and absolute.
更新:根据评论。
此处合理(但不是唯一)的方法是设置用户定义函数,其中关键单元格作为公式行的一部分输入。
将=MyUDF(D22, C21, C23, G23)
放在单元格F24中(显然,将正确的单元格放入公式中。
Function MyUDF(c1 as Range, c2 as Range, c3 as Range) as Variant
c1.FormulaR1C1 = "=SUM(R16C:R[-2]C)"
c2.FormulaR1C1 = "=SUM(R16C:R[-1]C)"
c3.FormulaR1C1 = "Overheads(%)"
MyUDF = c2.value * c1.value
End Function
通过这种方法,你不会在细胞周围反弹。上面的代码基于您的原始代码,并没有考虑您设置它的上下文(即您的工作表中还有其他事情可能会使这更简单)。