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

Oceń tę funkcję. (Mogą to zrobić tylko zalogowani użytkownicy)

1. Niepotrzebna.
0
Brak głosów
2. Może się przydać.
1
100%
3. Dobrze, że została napisana.
0
Brak głosów
 
Liczba głosów: 1

Awatar użytkownika
Jermor
Posty: 2233
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Funkcja użytkownika GDZIEJEST

Post autor: Jermor »

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

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 zmieniony pt sty 08, 2021 8:43 pm przez Jermor, łącznie zmieniany 2 razy.
Powód: Zmodyfikowałem kod funkcji.
AOO 4.1.15, LO 7.5.9 (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.
ODPOWIEDZ