赫克托(Hector)有一个很大的工作表,其中包含大约600行和70列。在这43,000个单元格中分布着大约200个带有注释的单元格。 Hector希望提取注释并将其放入数据表主体右侧的单元格中。例如,如果注释附加到单元格C43,则他希望该注释中的文本最终出现在单元格CC43中,并删除原始注释。

您可能会认为可以使用“选择性粘贴”来执行任务,但这是行不通的。如果复制原始单元格,然后使用“编辑|特殊粘贴|注释,然后仅将注释粘贴到目标单元格。它们仍然是注释,而不是单元格中的文本,这与赫克托的目标背道而驰。

处理此类提取的唯一方法是使用宏。在选定的单元格上运行时,以下内容将提取注释,移动注释文本,然后删除原始注释。

Sub CommentsToCells()

Dim rCell As Excel.Range     Dim rData As Excel.Range     Dim sComment As String

' Horizontal displacement     Const iColOffset As Integer = 78

' extract comments from selected range     If TypeName(Selection) = "Range" Then         Set rData = Intersect(Selection, ActiveSheet.UsedRange)

For Each rCell In rData.Cells             On Error Resume Next             sComment = rCell.Comment.Text             If Len(sComment) > 0 Then                 rCell.Offset(, iColOffset).Value = sComment                 rCell.Comment.Delete             End If             sComment = ""

On Error GoTo 0         Next     End If End Sub

宏使用iColOffset常量来指定应将注释文本右移多少个单元格。在这种情况下,偏移量(78)等于三个“字母”(26 * 3),因此最初在C列中的注释文本将在CC列中结束。

注意:

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

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

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