我想知道如何将一个公式复制到另一个公式中,同时保留原始值。例如,我在范围内有A1:A5
五个值(常量和/或公式的混合),我需要(在同一范围内 - 而不是在新列中)包含函数=Round("original value or formula",2)
,(或任何其他公式;这只是一个例子)
例如:
A1
原始值50.64635
A2
原始公式=3*F1
(可能显示54.25875
为F1
包含18.08625
)A3
原始公式=SQRT(2)
(将显示为1.4142136
)
我想要的结果是:
A1
新内容(公式)=round(50.64635,2)
A2
新内容(公式)=round(3*F1,2)
A3
新内容(公式)=round(SQRT(2),2)
等等。请注意,我不想A1
被改为50.65
,我也不想A2
被改为54.26
,甚至=ROUND(54.25875,2)
等等。我知道如何用简单的操作(copy/paste special – Formula – add, substract, multiply, divide
)做类似的事情并保留原始值或公式。但我不知道如何将函数包装在现有值周围或以其他方式构建公式,使用现有公式作为组件。
另一个想法是将我的原始值/公式转换为文本,使用查找/替换功能,连接或一些奇怪的混合,我会得到我想要的结果,但我想知道是否有一些更短的方法;)
答案1
Excel 的“查找和替换”功能似乎不够强大,无法满足您的需求。不过,在 VBA 中,这相当容易。
首先,复制一份您的文件,以防出现问题。
然后创建以下 VBA 子程序:
Sub Arom79Sub()
On Error Resume Next
For Each c In Range("A1:A5")
If c.HasFormula And Left(c.Formula, 1) = "=" Then
temp = Right(c.Formula, Len(c.Formula) - 1)
Else
temp = c.Value
End If
If temp <> "" Then
c.Formula = "=ROUND(" & temp & ", 2)"
End If
Next c
On Error GoTo 0
End Sub
看如何在 MS Office 中添加 VBA?有关如何在 Excel 和其他 Microsoft Office 应用程序中使用 VBA 的一般信息。
Arom79Sub
只是一个任意的子程序名称;使用您想要的任何名称。
On Error Resume Next
表示,如果发生错误,则转到下一个语句并继续运行。(例如,如果单元格包含不是数字的常量值(即字符串/文本值),则上述代码将导致错误。)For Each c
...Next c
是一个循环,查看范围内的每个单元格A1:A5
,设置c
为按顺序引用每个单元格。c.HasFormula
是一个布尔值,表示单元格是否c
包含公式。然后我们还检查“公式”的第一个字符是否为=
。这可能是多余的。如果它肯定是一个公式,请设置temp
为实际公式;即右侧的所有内容=
(例如3*F1
,在您的示例中为A2
)。- 否则,设置
temp
为单元格中的值(例如50.64635
,在您的示例中为A1
)。 - 如果值(或公式)非空,则将单元格的公式设置为。
=ROUND(previous_contents, 2)
- 执行
On Error GoTo 0
以恢复正常的错误处理。
然后运行子程序。
显然,您可以改变范围或新公式。