@ ответ Taosique, используя Split
отлично, но если вы хотите, результат возвращается в виде строки вы можете сделать следующее:
Function FirstWords(myStr As String, delimiter As String, words_to_extract As Long) As Variant
Dim i As Long, k As Long
For i = 1 To Len(myStr)
If Mid(myStr, i, 1) = delimiter Then
k = k + 1
If k = words_to_extract Then
FirstWords = Mid(myStr, 1, i)
Exit Function
End If
End If
Next I
'if you get to here -- trouble
'unless the delimiter count is words_to_extract - 1
If k = words_to_extract - 1 Then
FirstWords = myStr
Else
FirstWords = CVErr(xlErrValue)
End If End Function
Sub test()
Debug.Print FirstWords("This is a test. I hope it works", " ", 4)
Debug.Print FirstWords("This is a test. I hope it works", " ", 10)
End Sub
Когда test
запускается он первым отображается строка «Это тест." затем печатает условие ошибки.
Значительный эффект, аналогичный приведенному выше, может быть достигнут путем первого разделения строки с использованием Split
, а затем воссоединиться с ней, используя Join
. Тонкая разница - это поведение, если есть меньше, чем words_to_extract
слов. Подход Split
, затем Join
, вернет всю строку. Вышеприведенный код рассматривает это как условие ошибки и, если он используется в качестве функции рабочего листа UDF, отображает #VALUE!
в любой ячейке, которая его содержит.
Не могли бы вы дать мне часть кода, чтобы понять? Я не настолько опытен. – redviper2100
Добавлено в ответ. – Taosique