Excel-VBA,如何从一些句子行中提取第n个单词

时间:2012-01-06 12:38:53

标签: excel-vba vba excel

如何从某些句子行中提取第n个单词? 例如,我在A1列中有一个句子,在A2,A3等中有另一个句子,我如何从每个句子中提取第二个单词?并在每个句子旁边的单元格中显示。感谢有人可以为此写一个例子,我是excel-vba的新手。

3 个答案:

答案 0 :(得分:4)

拆分它;

'//get value
dim para As string: para = range("a1").value
'//normalize new lines to space & split on space
dim words() As string
words = Split(Replace$(para, vbCrLf, " "), " ")
'//3rd word in adjacent cell;
range("b1").value=words(2)

答案 1 :(得分:2)

您可以在VBA中轻松完成此操作,但我假设您希望使用公式执行此操作。

以下是如何解决这个问题的方法。将单元格A1视为具有要从中提取第二个单词的字符串。您可以使用“查找”功能确定第二个单词的起始位置:

=FIND(" ", A1, 1)

可以使用相同的函数找出第二个单词的完成位置:

=FIND(" ",A1, FIND(" ",A1)+1)

现在,我们可以使用Mid函数从头开始和结束位置提取单词:

=MID(A1, FIND(" ", A1, 1), FIND(" ",A1, FIND(" ",A1)+1)-FIND(" ", A1, 1))

这个最终公式是你想要使用的。它看起来很复杂,但它只是复制到Mid函数中的前两个公式。

我希望这会有所帮助。

答案 2 :(得分:0)

您可以将其粘贴到UDF的VBA模块中,但仅适用于单个单元格。只需给它一个单元格引用和你想要提取的单词编号:

Function WordExtract(CellRef As Range, Wordnum As Integer)

    Dim StartPos As Integer, EndPos As Integer, Counter As Integer

    StartPos = 1

    For i = 1 To Len(CellRef)
        If Mid(CellRef, i, 1) = " " Then
            If Wordnum - Counter = 1 Then
                EndPos = i - StartPos
                Exit For
                Else:
                StartPos = i + 1
                Counter = Counter + 1
            End If
        End If
    Next i

    If EndPos = 0 Then EndPos = Len(CellRef)

    WordExtract = Mid(CellRef, StartPos, EndPos)

End Function