Excel 使用VBA查找段落中文本的位置

Excel 使用VBA查找段落中文本的位置,excel,vba,user-defined-functions,xlsx,xlsm,Excel,Vba,User Defined Functions,Xlsx,Xlsm,我有一个给定的文本和一个段落,确切的文本出现在段落中。考虑索引为0的第一个单词,索引为1的第二个单词,依此类推。。我想找到段落中文本的开始和结束索引 我写的代码的字数目前,开始和结束的段落索引,但完全卡在这个代码 这是查找段落起始索引的代码 =B1+LEN(TRIM(A1))-LEN(SUBSTITUTE(TRIM(A1)," ",""))+1 Paragraph | Answer | StartIndex| EndIndex H

我有一个给定的文本和一个段落,确切的文本出现在段落中。考虑索引为0的第一个单词,索引为1的第二个单词,依此类推。。我想找到段落中文本的开始和结束索引

我写的代码的字数目前,开始和结束的段落索引,但完全卡在这个代码

这是查找段落起始索引的代码

=B1+LEN(TRIM(A1))-LEN(SUBSTITUTE(TRIM(A1)," ",""))+1
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.   
尽管这是毫无用处的

考虑4列的示例

1) 段落

=B1+LEN(TRIM(A1))-LEN(SUBSTITUTE(TRIM(A1)," ",""))+1
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.   
2) 段落中给出的确切答案

=B1+LEN(TRIM(A1))-LEN(SUBSTITUTE(TRIM(A1)," ",""))+1
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.   
3) 回答段落中的起始索引

=B1+LEN(TRIM(A1))-LEN(SUBSTITUTE(TRIM(A1)," ",""))+1
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.   
4) 回答段落末尾的索引

=B1+LEN(TRIM(A1))-LEN(SUBSTITUTE(TRIM(A1)," ",""))+1
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
结果是:

  • StartIndex:6
  • 完索引:20

VBA函数
InStr()
返回开始索引。例如,
InStr(段落,答案)
返回一个类似
15
的数字,该数字将作为起始索引。然后,最终索引将只是您得到的这个数字
+Len(答案)
。抱歉,我尝试了,但找不到任何这样的函数。您确定您是在VB编辑器上搜索,而不是在Excel工作表上搜索吗?这是一个非常基本的内置函数,如果你没有它的话会很奇怪。它可以工作,但是它可以在字符方面工作,而不是基于单词,因为我希望索引是基于单词而不是基于字符的。如果你不与我们分享你正在尝试做的事情,那么很难为你提供更多帮助。请用你想做的事情的细节来丰富你的问题,以便有人能帮助你。请注意,函数肯定与单词一起工作。