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