Zasadniczą funkcją wyodrębniania tekstu jest FRAGMENT.TEKSTU(tekst;pozycja;liczba)
Napisałem dodatkową funkcję użytkownika (UDF), która zwraca położenie poszukiwanego tekstu wewnątrz innego tekstu z uwzględnieniem, które kolejne wystąpienie ma zostać wykorzystane. Wykorzystując tę funkcję, można wyznaczyć wartości drugiego i trzeciego parametru funkcji FRAGMENT.TEKSTU.
Funkcja ma nazwę GDZIEJEST i ma trzy parametry. Pierwszy definiuje poszukiwany ciąg znaków. Drugi określa ciąg tekstowy, który ma zostać przeszukany. Trzeci parametr określa, który kolejny dopasowany ciąg znakowy ma zostać wykorzystany jako wynik.
Pominięcie parametru albo podanie wartości zerowej oznacza, że chodzi o pierwsze wystąpienie.
Jeśli trzecim parametrem jest litera „e”, poszukiwane będzie ostatnie wystąpienie.
Jeśli trzecim parametrem jest litera „i” wartość funkcji zwraca ilość wystąpień poszukiwanego ciągu w przeszukiwanym tekście.
Wartość funkcji 0 oznacza, że ciąg nie został znaleziony.
Wartość funkcji „Err param.” oznacza, że jeden z parametrów został przekazany jako obszar arkusza albo żaden parametr nie został przekazany.
Funkcję można wkopiować do biblioteki Standard kontenera Moje makra.
Wywołanie finkcji:
GDZIEJEST(co; gdzie;n)
co jest poszukiwanym ciągiem znaków.
gdzie jest ciągiem przeszukiwanym.
n jest liczbą mówiącą o tym, który znaleziony ciąg ma zostać uwzględniony. Jeśli zostanie pominięte, podane jako wartość zerowa albo ciąg tekstowy inny niż litera „e” albo „i” przyjęta zostanie wartość 1. Liczba ułamkowa zostanie zamieniona na liczbę całkowitą.
Litera „e” oznacza, że ma zostać odnaleziony ostatni ciąg. Litera „i” oznacza, że funkcja zwróci liczbę wystąpień ciągu „co” w ciągu „gdzie”.
Przykłady:
=GDZIEJEST(33;12333345676334543) zwróci 3
=GDZIEJEST(33;12333345676334543;2) zwróci 5
=GDZIEJEST(33;12333345676334543;"e") zwróci 12
=GDZIEJEST(33;12333345676334543;"i") zwróci 3
=GDZIEJEST(33;D13:D14;"i") zwróci Err param.
Kod
Kod: Zaznacz cały
Function Gdziejest(co, gdzie, optional n )
'Funkcja podaje położenie tekstu "co" w tekście "gdzie".
'Parametr "n" podaje, który zgodny tekst ma zostać znaleziony.
'Jeżeli n pominięto lub podano 0 szukane jest 1. wystapienie.
'Jeśli parametr ma wartość "e" szukane jest ostatnie wystąpienie.
'Jeśli parametr ma wartość "i" funkcja podaje ilość wystapień tekstu "co" w tekście "gdzie".
'Jeśli ciągu "co" nie ma w przeszukiwanym tekście, zwracana jest wartość 0.
'Zwracana liczba to położenie pierwszego znaku ciągu "co" w ciagu "gdzie".
'Funkcja rozróżnia wielkość liter.
'Funkcja zwraca warość "Błąd param." gdy którykolwiek parametr zostanie podany jako zakres komórek.
'Autor: jermor, polskie forum Apache OpenOffice i LibreOffice (2019)
'e-mail mor.chat@wp.pl
On Local Error Goto Parameters
Dim i As Integer, m As Integer, k As Integer, j As Integer
Gdziejest()=0
If IsMissing(n) Then n=1
If isArray(co) or isArray(gdzie) or isArray(n) then
Gdziejest()="Err param."
Exit Function
End If
If len(co)=0 Then Exit Function
If n=0 Then n=1
If UCase(n)="E" or UCase(n)="I" Then
j=len(gdzie)
ElseIf not(isNumeric(n)) Then
n=1
j=1
Else
j=int(n)
End If
If InStr(1,gdzie,co,0)=0 Then Exit Function
k=1
For i=1 to j
m=InStr(k,gdzie,co,0)
if m=0 Then
if UCase(n)="E" then
Gdziejest=k-len(co)
ElseIf UCase(n)="I" Then
Gdziejest()=i-1
End If
Exit Function
End If
if i < j Then k=m+len(co)
if i=n Then
Gdziejest()=m
Exit Function
End If
Next i
Parameters:
Gdziejest()="Err param."
End Function
Określenie początku tekstu (PP):
Jeśli tekst początkowy ma być także fragmentem wycinanym z tekstu przeszukiwanego : =GDZIEJEST(co;gdzie;n).
Jeśli tekst początkowy nie ma być częścią wycinanego fragmentu: =GDZIEJEST(co;gdzie;n)+DŁ(co).
Określenie końca tekstu (KT):
Jeśli tekst końcowy ma być także fragmentem wycinanym z tekstu przeszukiwanego : =GDZIEJEST(co;gdzie;n)+DŁ(co).
Jeśli początkowy nie ma być częścią wycinanego fragmentu: =GDZIEJEST(co;gdzie;n).
Ostatecznie
=FRAGMENT.TEKSTU(gdzie;PP;KT-PP)
należy zapewnić spełnienie warunku KT>PP