用数字替换字母(Microsoft Excel)
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。