Поиск позиции текста в абзаце с использованием VBA - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть заданный текст и абзац, точный текст присутствует в абзаце.Рассматривая первое слово с индексом 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 длявыше, если это можно решить.

1 Ответ

1 голос
/ 01 апреля 2019

Это должно быть то, что вы хотите:

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
  • EndIndex: 20
...