使用 VBA 查找段落中文本的位置
Finding position of a text in a paragraph using VBA
我有一个给定的文本和一个段落,确切的文本出现在该段落中。考虑索引为 0 的第一个单词,索引为 1 的第二个单词等等。我想找到段落中文本的开始和结束索引。
我写了当前字数、段落开始和结束索引的代码,但完全卡在了这段代码中
这是查找段落起始索引的代码
=B1+LEN(TRIM(A1))-LEN(SUBSTITUTE(TRIM(A1)," ",""))+1
这个问题没用..
考虑具有 4 列的示例
1)段落
2)段落
中的确切答案
3)段落中的答案开始索引
4)段落中的答案结束索引
Paragraph | Answer | StartIndex| EndIndex
Hello Lorem ipsum Hello |amet, consectetur | 6 | 20
dolor sit amet, consectetur|adipisicing elit, | |
adipisicing elit, sed do |sed do eiusmod tempor| |
eiusmod tempor incididunt |incididunt ut labore |
ut labore et dolore magna |et dolore magna |
aliqua. Ut enim ad minim |aliqua |
veniam, quis nostrud |
exercitation ullamco labor |
nisi ut aliquip ex Hello |
ea commodo consequat.
对于开始和结束索引,只需从 0,1,2,... 开始计算段落中的单词数
如果可以解决,请帮我提供上面的 VBA 代码。
这应该是你想要的:
Sub TestIt()
Const WHOLE_TEXT As String = "Hello Lorem ipsum Hello dolor sit amet, consecteturadipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco labor nisi ut aliquip ex Hello ea commodo consequat."
Const SEARCH_TEXT As String = "amet, consecteturadipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua"
Dim startIndex As Long
Dim endIndex As Long
If FindText(WHOLE_TEXT, SEARCH_TEXT, startIndex, endIndex) Then
Debug.Print "StartIndex: " & startIndex & vbNewLine & "EndIndex: " & endIndex
Else
Debug.Print "Not found."
End If
End Sub
'Returns True if searchText has been found.
'The *index parameters are ByRef because they will contain the results.
Function FindText(ByVal wholeText As String, ByVal searchText As String, ByRef outStartIndex As Long, ByRef outEndIndex As Long) As Boolean
Dim substringPos As Long
substringPos = InStr(wholeText, searchText)
If substringPos = 0 Then Exit Function
outStartIndex = UBound(Split(Trim(Left(wholeText, substringPos - 1)), " ")) + 1
outEndIndex = UBound(Split(Trim(searchText), " ")) + 1 + outStartIndex
FindText = True
End Function
结果是:
- 起始索引:6
- 结束索引:20
我有一个给定的文本和一个段落,确切的文本出现在该段落中。考虑索引为 0 的第一个单词,索引为 1 的第二个单词等等。我想找到段落中文本的开始和结束索引。
我写了当前字数、段落开始和结束索引的代码,但完全卡在了这段代码中
这是查找段落起始索引的代码
=B1+LEN(TRIM(A1))-LEN(SUBSTITUTE(TRIM(A1)," ",""))+1
这个问题没用..
考虑具有 4 列的示例
1)段落
2)段落
中的确切答案3)段落中的答案开始索引
4)段落中的答案结束索引
Paragraph | Answer | StartIndex| EndIndex
Hello Lorem ipsum Hello |amet, consectetur | 6 | 20
dolor sit amet, consectetur|adipisicing elit, | |
adipisicing elit, sed do |sed do eiusmod tempor| |
eiusmod tempor incididunt |incididunt ut labore |
ut labore et dolore magna |et dolore magna |
aliqua. Ut enim ad minim |aliqua |
veniam, quis nostrud |
exercitation ullamco labor |
nisi ut aliquip ex Hello |
ea commodo consequat.
对于开始和结束索引,只需从 0,1,2,... 开始计算段落中的单词数 如果可以解决,请帮我提供上面的 VBA 代码。
这应该是你想要的:
Sub TestIt()
Const WHOLE_TEXT As String = "Hello Lorem ipsum Hello dolor sit amet, consecteturadipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco labor nisi ut aliquip ex Hello ea commodo consequat."
Const SEARCH_TEXT As String = "amet, consecteturadipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua"
Dim startIndex As Long
Dim endIndex As Long
If FindText(WHOLE_TEXT, SEARCH_TEXT, startIndex, endIndex) Then
Debug.Print "StartIndex: " & startIndex & vbNewLine & "EndIndex: " & endIndex
Else
Debug.Print "Not found."
End If
End Sub
'Returns True if searchText has been found.
'The *index parameters are ByRef because they will contain the results.
Function FindText(ByVal wholeText As String, ByVal searchText As String, ByRef outStartIndex As Long, ByRef outEndIndex As Long) As Boolean
Dim substringPos As Long
substringPos = InStr(wholeText, searchText)
If substringPos = 0 Then Exit Function
outStartIndex = UBound(Split(Trim(Left(wholeText, substringPos - 1)), " ")) + 1
outEndIndex = UBound(Split(Trim(searchText), " ")) + 1 + outStartIndex
FindText = True
End Function
结果是:
- 起始索引:6
- 结束索引:20