Funkcja użytkownika GDZIEJEST

Gotowe szablony, skrypty, makropolecenia i rozszerzenia. Tutaj możesz pochwalić i podzielić się swoją twórczością z innymi użytkownikami

Funkcja użytkownika GDZIEJEST

Postprzez Jermor » So gru 07, 2019 2:16 pm

Na forum jeden z użytkowników programu Calc poszukiwał rozwiązania pozwalającego wyodrębnić z ciągu tekstowego fragmentu tekstu rozpoczynającego się wskazanym tekstem i zakończonego także takim samym lub innym wskazanym tekstem. Z tym że wymogiem dodatkowym było wskazanie, który kolejny tekst początkowy lub końcowy ma zostać uwzględniony.
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   Rozszerz widokZwiń widok
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

Wykorzystanie funkcji do wyznaczenia parametrów funkcji FRAGMENT.TEKSTU.
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
Ostatnio edytowano Pn gru 09, 2019 6:25 pm przez Jermor, łącznie edytowano 1 raz
Powód: Zmodyfikowałem kod funkcji.
AOO 4.1.7, LO 6.4.6 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Avatar użytkownika
Jermor
 
Posty: 1207
Dołączył(a): So paź 12, 2013 11:09 am

Powrót do Projekty użytkowników

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość

cron