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

问题描述 投票:0回答:2

我想用= 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

但是,如果有人能够想到一种方法来做到这一点,没有一个更好的循环。

excel vba reference cell
2个回答
1
投票

您可以使用

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

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

Dim iVal As Double
iVal = [A1].Value
[A1].FormulaR1C1 = "=" & iVal &  "*R[1]C"

0
投票

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

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

案例:

Workbooks("Personal.xlsb").Worksheets("Sheet1").Activate
oldvalue = Range("A1").value
Range("A1").FormulaLocal = "=" & oldvalue & "*A2"
© www.soinside.com 2019 - 2024. All rights reserved.