梅尔(Mel)通常想在每个单元格范围内的任何内容之前添加一个字符。例如,他可能想要在某些文本的开头添加一个字母(因此,“ 123”变为“ A123”,“ xyz”变为“ Axyz”),或者他可能想要添加撇号(因此,“ 123”变为“’ 123”和“ xyz”

变为“’xyz”)。梅尔(Mel)想知道是否可以使用“查找并替换”(Find and Replace)完成此操作。

简短的答案是它不能。 Excel中的“查找和替换”功能比Word中的功能受到更多限制,在Word中,您具有搜索通配符并在替换内容中使用“查找内容”文本的功能。 (这些只是Excel的“查找和替换”中缺少的功能的两个示例。)

然后,一个可能的答案是将数据复制到Word,使用“查找和替换”进行更改,然后将数据复制回。当然,您将冒着往返丢失格式,丢失某些精度以及将所有公式结果转换为静态值的风险。对于许多用户而言,这些风险是不可接受的。

另一个选择是使用Excel的串联功能。例如,如果要添加的值在A列(以A1开头)中,则可以使用B列这样的公式:

="A" & A1

结果将字母A附加到A1中的任何内容之前。这适用于除撇号之前的任何内容。试图在前面加上撇号会以’123或’xyz结尾,但是撇号在单元格中可见。对Excel来说,结果是不同的,就像键入撇号后跟123或键入撇号后跟xyz。 (在键入的情况下,撇号表示应将单元格内容视为文本,并且撇号仅在公式栏中可见,而在单元格本身中不可见。)

如果您实际上要更改一系列单元格中的值(使用“查找和替换”的愿望会建议这样做),那么您唯一可以做的就是使用宏进行更改。如果只想在以字母(例如A)为设定值(例如123)开头的单元格前添加前缀,则只需一个简单的宏即可。

Sub Prepend1()

ToFind = "123"

ToFindLength=Len(ToFind)

ToPrepend = "A"



For Each rcell In Selection         If LCase(Mid(rcell.Value, 1, ToFindLength)) =  LCase(ToFind) Then             rcell.Value = ToPrepend & rcell.Value         End If     Next End Sub

请注意,ToFind变量包含要添加的开始文本,而ToPrepend变量包含要显示在该字符串之前的内容。在这种情况下,当您选择一个单元格范围并运行宏时,任何以123开头的内容(例如“ 123”或“ 12345”

或“ 123D27X”)都将字母A添加到细胞。

但是,如果要将字母添加到范围中每个单元格的开头,而不仅仅是以123开头的单元格,则此类宏无济于事。在这种情况下,您需要使用其他方法。

Sub Prepend2()

Dim rng As Range     Dim c As Range     Dim ToPrepend As String

ToPrepend = "A"



' Process only text and number constants     Set rng = Selection.SpecialCells(xlCellTypeConstants, 3)



For Each c In rng         c.Value = ToPrepend & c.Value     Next c End Sub

该宏将获取运行之前选择的所有单元格的子集(仅包含文本和数字值的那些单元格),然后将ToPrepend变量的内容添加到该单元格的开头。如果要更改前缀,只需更改变量的值即可。 (应注意,如果将ToPrepend更改为撇号,则在其前面加上撇号的单元格的行为就如同您键入并在其后跟单元格值的撇号一样。)

注意:

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

链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。

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

本技巧(12239)适用于Microsoft Excel 2007和2010。您可以在以下旧版Excel菜单界面中找到本技巧的版本:

链接:/ excel-Using_Find_and_Replace_to_Pre-Pend_Characters [使用查找和替换以预先添加字符]。