汤姆的工作表包含很多文本。他需要一种从任何给定单元格的文本中提取括号内每个单词的第一个字母的方法。例如,如果一个单元格包含“(在春季)需要除草的杂草”,则汤姆需要拉“ dts”

从那个文本。他怀疑这必须使用宏来完成,但不知道从哪里开始。

如果您想手动执行此任务,那么完成起来并不难。我将快速而一般地完成这些步骤。

假设您的文本在A列中,并且每个单元格仅包含一组括号。在这种情况下,您可以在B列中添加以下内容:

=IFERROR(LEFT(MID(A1,FIND("(",A1)+1,LEN(A1)),FIND(")", MID(A1,FIND("(",A1)+1,LEN(A1)))-1),"")

即使我在这里将公式分为两行,也请记住,它是一个公式,应该这样输入。根据需要将其复制下来。在B列中最后得到的是单元格的第一组括号(如果有)中包含的文本。

接下来,选择B列中的所有单元格,按Ctrl + C,然后使用“选择性粘贴”将值粘贴回这些单元格中。这摆脱了公式,但保留了提取的括号内的文本。

现在,仍应选择B列中的单元格。您想使用“文本到列”向导(从功能区的“数据”选项卡中)将单词拆分为单个单元格。在向导中使用空格作为分隔符很容易做到。完成此操作后,您将在以C列开头的每一列中得到一个单词。

现在,在其中没有任何单词的第一列中(假设是J列),您将输入以下公式:

=LEFT(TRIM(C1),1) & LEFT(TRIM(D1),1) & LEFT(TRIM(E1),1)

& LEFT(TRIM(F1),1) & LEFT(TRIM(G1),1)) & LEFT(TRIM(H1),1)

& LEFT(TRIM(I1),1)

同样,这是一个公式,即使此处显示为三行。这将导致您在J列中输入所需的首字母。

显然,如果您只需要偶尔拉一下字母,那么此过程是“可行的”。如果您需要更频繁地执行此操作,那么最好依靠用户定义的函数来为您完成工作。以下是一个可以正常使用的简单方法:

Function PickInitials(sRaw As String) As String     Dim sTemp As String     Dim J As Integer     Dim Wds() As String

sTemp = ""

J = InStr(sRaw, "(")

If J > 0 Then         sTemp = Mid(sRaw, J + 1)

J = InStr(sTemp, ")")

If J > 0 Then             sTemp = Left(sTemp, J - 1)

End If         Wds = Split(sTemp)



sTemp = ""

For J = 0 To UBound(Wds)

sTemp = sTemp & Left(Trim(Wds(J)),1)

Next J     End If     PickInitials = sTemp End Function

要使用此功能,只需在单元格中使用以下内容:

=PickInitials(A1)

如果单元格中没有括号的文本,或者只有一个括号,则该函数将正常工作,并且单词之间的多个空格也不会抛出该函数。该功能保留首字母大写。如果希望它以小写形式返回所有字母,则可以将宏的最后一行更改为:

PickInitials = LCase(sTemp)

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

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