从字符串中提取首字母(Microsoft Excel)
拉杰夫需要一个公式,该公式将提取一系列单词的前几个字母。例如,如果一个单元格包含文本“ Rajeev Kumar Pandey”,他想将字母“ RKP”提取到另一个单元格中。
序列中的单词数可能随单元而异。
有两种方法可以完成此任务。首先,假设您不想通过添加中间列来修改工作表的结构。这种假设也排除了使用“文本到列”功能将原始字符串拆分为单个单词的可能性。
该问题的关键是确保您的公式可以确定空格在原始字符串中的位置。您可能会认为以下公式可以胜任:
=LEFT(A1,1)&MID(A1,FIND(" ",A1,1)+1,1)&MID(A1, FIND(" ",A1,FIND(" ",A1,1)+1)+1,1)
该公式部分起作用。如果原始字符串有两个空格分隔三个单词,则效果很好。如果字数少,则公式将返回错误。如果还有其他单词,则仅返回前三个单词的前一个字母(忽略第三个单词之后的任何内容)。
这意味着该公式不仅需要检查空格,而且如果没有空格或空格太小,则需要处理错误。错误检查意味着公式变得更长:
=IF(ISERR(LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1) &MID(A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1,1) &MID(A1,SEARCH(" ",A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1)+1,1)), IF(ISERR(LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1) &MID(A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1,1)), IF(ISERR(LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)), IF(ISERR(LEFT(A1,1)),"",LEFT(A1,1)),LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)), LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1)&MID(A1,SEARCH(" ",A1, SEARCH(" ",A1)+1)+1,1)),LEFT(A1,1)&MID(A1,SEARCH(" ",A1)+1,1) &MID(A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1,1) &MID(A1,SEARCH(" ",A1,SEARCH(" ",A1,SEARCH(" ",A1)+1)+1)+1,1))
此公式将正确处理字符串中0到4个单词的任何内容。它还假定字符串不以空格开头或结尾,并且单词之间不包含多个空格。如果要处理更多的单词或其他潜在的复杂性(例如单词之间的空格数),则最好使用用户定义的函数。
用户定义的函数可以通过多种方式从字符串的单词中提取前导字符。实际上,我收到了很多可以完成相同任务的变体。但是,以下示例可能是我遇到的最简洁的代码:
Function Initials1(Raw As String) As String Dim Temp As Variant Dim J As Integer Application.Volatile Temp = Split(Trim(Raw)) For J = 0 To UBound(Temp) Initials1 = Initials1 & Left(Temp(J), 1) Next J End Function
此代码将在从Excel 2000开始的任何版本的VBA中工作。Split函数根据其中的空格将字符串“撕裂”。字符串中的各个单词都放置在一个数组(在本例中为Temp)中,然后您可以在其中访问各个单词。要在工作表中使用该功能,只需使用以下命令:
=Initials1(A1)
如果您使用的Excel版本不支持Split功能,那么以下代码也可以正常工作:
Function Initials2(Raw As String) Dim p As Integer Application.Volatile Initials2 = "" p = 0 Do Initials2 = Trim(Initials2) & Mid(Raw, p + 1, 1) p = InStr(p + 1, Raw, " ") Loop Until p = 0 End Function
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(8661)适用于Microsoft Excel 97、2000、2002和2003。您可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: