Bill有一列文字,其中他需要用代表字母在字母表中位置的数字替换所有字母实例。因此,例如,如果一个单元格包含“ T10A22”,那么Bill需要替换诸如“ 2010122”之类的字母,其中T替换为20,A替换为1。他指出,其中可以有任意数量的字母任何给定的单元格。

如果只需要一次(在一个工作表中),选择列并使用“查找并替换”可能很容易。您可以搜索A并替换为1,搜索B并替换为2,依此类推。只能执行26次迭代,这听起来很麻烦,但是可以比创建宏进行更改所需的时间更少。

话虽如此,如果您必须定期执行此任务,那么宏是您的最佳解决方案。您可以通过以下方式使用宏来实现“查找和替换”方法:

Sub ReplaceLetters1()

Selection.Replace What:="A", Replacement:="1", LookAt:=xlPart, _       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _       ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2     Selection.Replace What:="B", Replacement:="2"

Selection.Replace What:="C", Replacement:="3"

Selection.Replace What:="D", Replacement:="4"

Selection.Replace What:="E", Replacement:="5"

Selection.Replace What:="F", Replacement:="6"

Selection.Replace What:="G", Replacement:="7"

Selection.Replace What:="H", Replacement:="8"

Selection.Replace What:="I", Replacement:="9"

Selection.Replace What:="J", Replacement:="10"

Selection.Replace What:="K", Replacement:="11"

Selection.Replace What:="L", Replacement:="12"

Selection.Replace What:="M", Replacement:="13"

Selection.Replace What:="N", Replacement:="14"

Selection.Replace What:="O", Replacement:="15"

Selection.Replace What:="P", Replacement:="16"

Selection.Replace What:="Q", Replacement:="17"

Selection.Replace What:="R", Replacement:="18"

Selection.Replace What:="S", Replacement:="19"

Selection.Replace What:="T", Replacement:="20"

Selection.Replace What:="U", Replacement:="21"

Selection.Replace What:="V", Replacement:="22"

Selection.Replace What:="W", Replacement:="23"

Selection.Replace What:="X", Replacement:="24"

Selection.Replace What:="Y", Replacement:="25"

Selection.Replace What:="Z", Replacement:="26"

End Sub

要使用宏,只需选择要处理的单元,然后运行它。同样,您也可以使用依赖于For …​ Next循环的另一种方法:

Sub ReplaceLetters2()

Dim J As Integer

Selection.Replace What:="A", Replacement:="1", LookAt:=xlPart, _         SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _         ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2     For J = 66 To 90         Selection.Replace What:=Chr(J), Replacement:=J - 64     Next J End Sub

虽然第一个.Replace操作可以放置在For …​ Next循环中,但我选择将其分开,以便(至少对我而言)循环看起来更简单。这是一个风格选择,而不是其他任何事情。

如果由于某种原因,您不想使用.Replace方法,则可以使用老式的方法来查看要评估的内容中的每个字符。这是此用户定义函数中使用的方法:

Function LetterToNum(c As Range) As String     Dim sRaw As String     Dim J As Integer

sRaw = UCase(c)

For J = 1 To 26         sRaw = Replace(sRaw, Chr(J + 64), J)

Next J     LetterToNum = sRaw End Function

要使用此功能,只需将以下内容放在工作表中,其中A1是要转换的单元格:

=LetterToNum(A1)

如果您不想使用宏,则可以使用一个较长的公式来进行单元格的转换:

=TEXTJOIN("",FALSE, IF(ISNUMBER(VALUE(MID(A1,SEQUENCE(1,LEN(A1)),1))), MID(A1,SEQUENCE(1,LEN(A1)),1), COLUMN(INDIRECT(MID(A1,SEQUENCE(1,LEN(A1)),1) & ":" & MID(A1,SEQUENCE(1,LEN(A1)),1)))))

该公式假定您要转换的文本在单元格A1中。它基本上查看文本字符串中的每个字符,并确定它是否为数字。如果是,则使用原始字符;否则,使用原始字符。如果不是,则使用INDIRECT函数根据字母确定列,然后使用COLUMN返回该列的数值。然后使用TEXTJOIN函数将其重新组合。

注意:

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

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

本技巧(7820)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。