范围的值等于先前范围的值和地址VBA

时间:2018-07-30 20:12:56

标签: excel vba reference cell

我想用= 4 * A2替换A1的值4。但是,当我尝试:

Workbooks("Personal.xlsb").Worksheets("Sheet1").Activate
Range("A1").Value = "=" & Range("A1").Value * Range("A2").Address(0, 0)

我收到不匹配错误。运行此:

Range("A1").Value = "=" & Range("A1").Value * Range("A2").Value

返回值16(A2 = 4),但是如前所述,我希望A1为4 * A2。有什么建议么?非常感谢您的帮助。

编辑: 我意识到我需要一些不同的东西。我想用以前的值和一个单元格的引用替换一系列单元格。我现在遇到错误的部分是将一系列单元格替换为其以前的值,但我仍然收到不匹配错误。

oldvalue = Range("D8:I8").Value
Range("D8:I8").Formula = "=" & oldvalue & "*A2"

有什么想法吗?再次感谢您的帮助。

我可以通过For Each循环来做到这一点:

Sub test()
Workbooks("Personal.xlsb").Worksheets("Sheet1").Activate
Dim rng As Range: Set rng = 
Workbooks("Personal.xlsb").Worksheets("Sheet1").Range("D8:I8")
Dim cel As Range
For Each cel In rng.Cells
    With cel
        oldvalue = .Value
        .Formula = "=a2*" & oldvalue
    End With
Next cel
End Sub

但是,如果有人能想到一种无需循环的方法,那就更好了。

2 个答案:

答案 0 :(得分:1)

您可以使用

close()

如果您需要A1的旧值,那么您确实可以将其存储在变量中

[A1].FormulaR1C1 = "=4*R[1]C"

答案 1 :(得分:0)

编写fórmulas的更好方法是使用.FormulaLocal。

对于您的情况,我建议您使用一个变量来保持范围A1的旧值。

案例:

Workbooks("Personal.xlsb").Worksheets("Sheet1").Activate
oldvalue = Range("A1").value
Range("A1").FormulaLocal = "=" & oldvalue & "*A2"