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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Range的值等于先前范围的值和地址VBA相关的知识,希望对你有一定的参考价值。

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

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

答案

您可以使用

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

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

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

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

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

案例:

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

以上是关于Range的值等于先前范围的值和地址VBA的主要内容,如果未能解决你的问题,请参考以下文章

从 vba 中的单元格地址获取 excel 合并单元格的值

带有范围的 Excel VBA Vlookup

vba 用autofilter筛选不符合条件的值

使用类中的值设置等于新值而不更改先前值c ++

VBA里怎么在range()select里面添加变量

HTML输入范围的值,getattribute vs value