如果遇到这样一种情况,即在单元格的每一行中只需要第一个单词而不是所有字符,那么您必须阅读本文。以下教程将帮助您通过excel中的VBA代码仅检索第一个单词。

|在本文中,我们将重点介绍如何仅在通过宏代码用分号分隔的单元格的每一行中保留第一个单词。

问题:我正在处理的数据有时在每个单元格中都有多行,我只想提取第一个单词。

您可以找到原始问题http://www.excelforum.com/excel-programming-vba-macros/1093228-keep-first-word-in-each-line-separate-by-semicolon-and-remove-everything-else .html [此处]

以下是输入文本的快照(在工作表之前)

img1

===

以下是A列中输入文本(在工作表之后)的快照,并要求在B列中输出;请参考以下快照:

===

img2

===

获取代码;我们需要按照以下步骤启动VB编辑器:单击“开发人员”选项卡。在“代码”组中,选择“ Visual Basic”。 *将以下代码复制到标准模块中

img3

Function FirstWordOnly(rng As Range)

Dim Arr() As Variant

Dim Count As Integer

Dim i As Integer



Count = Len(rng) - Len(Replace(rng, Chr(10), ""))



If Count > 0 Then

ReDim Arr(0 To Count)

For i = 0 To Count

If i = 0 Then

Arr(i) = Left(rng, InStr(1, rng, " ") - 1)

ElseIf j = 0 Then

j = InStr(1, rng, Chr(10))

Arr(i) = Mid(rng, j + 1, InStr(j, rng, " ") - j)

Else

j = InStr(j + 1, rng, Chr(10))

Arr(i) = Mid(rng, j + 1, InStr(j, rng, " ") - j)

End If

Next



FirstWordOnly = Join(Arr, "; ")

Else

If InStr(1, rng, " ") > 0 Then

FirstWordOnly = Left(rng, InStr(1, rng, " "))

Else

FirstWordOnly = rng

End If



End If



End Function

img4

===

现在,可以使用VBA代码了。我们将使用新创建的用户定义函数,即,Before Sheet中的“ FirstWordOnly”。

要在单元格B2中使用UDF获得输出,公式将为= FirstWordOnly(A2)

img5

代码说明:

在上面的代码中,我们使用了COUNT,LEN,REPLACE,IF,INSTR,MID,CHR,LEFT,JOIN VBA函数。

‘Len(rng)’;这将检查我们所指的“ Replace(rng,Chr(10),“”)“单元格的长度;该代码检查Chr(10),即每行中的换行符,然后替换为双引号(无)

‘Count = Len(rng)-Len(Replace(rng,Chr(10),“”)))’; Count将存储替换换行符后每行长度的差值。这将检查Count的长度是否大于零,并且如果发现它等于零,即单元格为空,则IF条件将不执行代码。要对此进行检查,可以在单元格B5中使用= FirstWordOnly(A5),它将返回0

如果单元格不是空白,那么将在IF条件下使用For循环,并通过LEFT函数,如果每个单元格中有多行,则将检索第一个单词JOIN函数,并在末尾添加分号结论:使用UDF我们可以删除所有内容在每个单元格行中,除了通过VBA的第一个单词外。此功能将在从旧到新的所有版本中工作,即Microsoft Excel 2003,Microsoft Excel 2007,Microsoft Excel 2010,Microsoft Excel 2013。 如果您喜欢我们的博客,请在Facebook上与您的朋友分享。您也可以在Twitter和Facebook上关注我们。

img6

我们很高兴收到您的来信,请让我们知道我们如何改进,补充或创新我们的工作,并为您做得更好。写信给我们[email protected]

image 48