<h1>在注释中放置公式结果[3374] </ h1> Excel不允许您直接或自动将公式结果插入单元格的注释中。但是,您可以使用宏将结果精确地放置在所需的位置。

鲍勃(Bob)询问是否可以编写公式并在注释中而不是在单元格中获得结果。简短的答案是不,您不能使用公式来做到这一点。但是,您可以使用宏来实现。例如,以下宏将两个单元格(A1和B1)的内容相加,然后将结果粘贴到单元格C1的注释中:

Sub MakeComment()

With Worksheets(1).Range("C1").AddComment         .Visible = True         .Text "Total of cell A1 plus cell B1 is equal to " & _           ([A1].Value) + ([B1].Value)

End With End Sub

如果您希望在一系列单元格上运行宏,则需要另一种方法。以下宏循环遍历选择中的所有单元格。如果单元格包含公式,则宏会将值(公式的结果)放在该单元格的注释中。

Sub ValueToComment()

Dim rCell As Range     For Each rCell In Selection         With rCell             If .HasFormula Then                 On Error Resume Next                 .Comment.Delete                 On Error GoTo 0                 .AddComment                 .Comment.Text Text:=CStr(rCell.Value)

End If         End With     Next     Set rCell = Nothing End Sub

在选择中的单元格之间循环时,如果其中一个单元格具有公式和现有注释,则该注释将被删除并替换为包含公式结果的新注释。

之后,将显示该单元格的值以及具有相同编号的注释。除了CStr,您还可以使用Format函数以所需的任何方式显示值。

您还可以创建一个宏,该宏将在您更新特定单元格的内容时修改注释。例如,假设每次有人在单元格C11中进行更改时,您都希望将该单元格中任何内容的结果放入附加到单元格F15的注释中。下面的宏就是这样做的:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim sResult As String

If Union(Target, Range("C11")).Address = Target.Address Then         Application.EnableEvents = False         Application.ScreenUpdating = False         sResult = Target.Value         Target.ClearContents

With Range("F15")

.ClearComments             .AddComment             .Comment.Text Text:=sResult         End With         Application.EnableEvents = True         Application.ScreenUpdating = True     End If End Sub

当某人在单元格C11中输入公式(或值)时,该公式的结果(或值本身)将放入附加到单元格F15的注释中。由于这是一个事件触发的宏,因此需要在将要运行的工作表的代码窗口中输入它。

最后,您可能希望宏监视整个列。下面的宏使用工作表的Change事件,就像前面的宏一样。但是,只有在F列中进行了更改,并且仅当该列中的单个单元格发生更改时,它才会生效。

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Cells.Count > 1 Then Exit Sub     If Target.Column <> 6 Then Exit Sub

Dim x As String     Application.EnableEvents = False     If Target.HasFormula Then         x = Evaluate(Target.Formula)

Else         x = Target.Text     End If

Target.ClearComments     If Target.Text = "" Then         Application.EnableEvents = True         Exit Sub     End If

Target.AddComment x     Target = ""

Application.EnableEvents = True End Sub

如果用户对F列中的单个单元格进行了更改,则宏将获取输入内容的结果,并将其放在该单元格的注释中。然后删除单元格的内容。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(3374)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: