Ciaran在图书馆中工作,并且经常必须在Excel中使用很长的ISBN号列表。这些数字必须包含10或13位数字,可以包含破折号,并且可以具有前导零。他对包含ISBN的单元格使用文本格式,以使它们完整地保留为文本字符串。出于某些目的,必须删除ISBN中的破折号(他为此使用“查找并替换”),这就是麻烦的开始。

0-241-95011-2变成241950112(现在下降到9位数字),更糟的是,978-0-00-200784-9变成9.78E + 12(科学计数法)。 Ciaran找不到解决这两个问题的任何方法,无论他在使用“查找和替换”来消除破折号之前或之后如何进行格式化。

发生的情况是,当您编辑单元格时,Excel会将单元格内容解析为数字而不是文本。在这种情况下,最好的解决方案是在执行“查找和替换”以消除破折号之前,确保单元格内容前面带有撇号。

如果您的工作表在A列中包含很多ISBN号,则可以使用以下公式添加撇号:

= "'" & A1

然后,您可以复制公式的结果,然后使用“选择性粘贴”将值粘贴回A列。然后,A列中的每个值都将包含撇号。当您以后执行“查找和替换”时,前导零仍然会出现,并且您将不会尝试任何科学计数法。

之所以起作用,是因为撇号是Excel的指示符,它指示应将单元格内容视为文本。撇号未显示在工作表中,但它是单元格内容的一部分,正如您可以通过查看公式栏来看出的那样。

另一种方法是绕过使用“查找和替换”来消除破折号。而是使用SUBSTITUTE函数以这种方式删除它们:

=SUBSTITUTE(A1,"-","")

SUBSTITUTE工作表函数返回文本值,因此将保留所有前导零,并且Excel不会尝试将数字转换为使用数字格式。

如果您通常需要从包含ISBN的单元格区域中删除破折号,则最好使用宏来执行该操作。以下宏可以在运行之前对您选择的任何单元格起作用。

Sub RemoveDashes()

Dim c As Variant, sISBN As String

For Each c In Selection         sISBN = Application.Substitute(c, "-", "")

c.NumberFormat = "@"

c.Value = "'" & sISBN     Next End Sub

基本上,宏会执行三件事:删除破折号,将单元格设置为文本格式,然后将剥离的ISBN放回到单元格中,并在其前面加上撇号。

注意:

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

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

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