Wyciągnięcie danych tylko z jednej linijki w komórce.

Użytkowanie arkusza kalkulacyjnego
fiddler
Posty: 2
Rejestracja: wt sie 14, 2018 11:42 am

Wyciągnięcie danych tylko z jednej linijki w komórce.

Post autor: fiddler »

Przepraszam za banalne pytanie, ale nie potrafię znaleźć odpowiedzi...
Czy istnieje formuła, pozwalająca wyciągnąć dane tylko z jednej linijki, gdy jest ich więcej w jednej komórce (oddzielone Ctrl+Enter)?

Przykład:
Komórka A1 wygląda tak:
Czerwony
Zielony
Niebieski

Chcę wprowadzić formuły, wyrzucające w C1: "Czerwony", w D1: "Zielony", w E1: "Niebieski". Czy istnieje na to jakiś sposób?
Załączniki
RGB.jpg
LibreOffice 5.4.4.2, Windows 7
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Wyciągnięcie danych tylko z jednej linijki w komórce.

Post autor: Jan_J »

pierwszy wiersz
<Ctrl+Enter> to znak ASCII numer 10. Albo jest w tekście, albo go nie ma. Funkcja FIND(co; gdzie; odkąd) poszukuje numeru porządkowego pod którym w tekście gdzie występuje fraza co, począwszy od pozycji numer odkąd. Albo generuje błąd, jeśli tej frazy nie ma.
=FIND(CHAR(10);A1)
Funkcja LEFT(tekst; liczba) pobiera z tekstu jego liczba pierwszych znaków (albo mniej jeśli tekst jest krótszy).
=LEFT(A1;FIND(CHAR(10);A1)-1)
Ale tym sposobem dostaniemy błąd w przypadku tekstu nie zawierającego Enter. Więc warto sprawdzić, czy taki znak został znaleziony i zależnie od efektu albo pobrać fragment do miejsca wystąpienia, albo cały tekst
=IF(ISERROR(FIND(CHAR(10);A1));A1;LEFT(A1;FIND(CHAR(10);A1)-1))

Po polsku:
IF -> JEŻELI
CHAR -> ZNAK
LET -> LEWY
FIND -> SZUKAJ.TEKST
ISEROR -> CZY.BŁĄD

wszystkie wiersze
Sięganie tym sposobem do następnych linii jest kłopotliwe. Rozbicie tekstu na ciąg tekstów wg znaku albo frazy nosi nazwę SPLIT. Niestety nie ma na to gotowej funkcji w bibliotece formuł Calca. Jej realizacja jest prosta, choć wymaga nieco programowania. W https://forum.openoffice.org/en/forum/v ... 18#p419852 wolontariusz @RPG zaproponował takie rozwiązanie:

Kod: Zaznacz cały

Function StrSplit(SplitThis, SplitChar As String)
    dim tempory  ' we define a tempory variable
    ' Be aware that we use the variabele first for the string value.
    ' We set it as an empty string
    tempory="" ' Make sure we have an empty string.
    if typename(SplitThis)="String" then
    ' The parameter is a string in this case we need a string   
       tempory=replace(SplitThis,"  ", " ") ' erase first all double spaces
    ' Be aware that that tempory is change from a single variabele to an array variabele
       tempory =SPLIT(tempory,SplitChar) ' Split string to array
    end if
    StrSplit=tempory ' Give back to the function an empty string or an array as the original function was
End Function
Jak widać, jest to tylko opakowanie pozwalające użyć pod nazwą StrSplit funkcji Split należącej do standardowej biblioteki języka Basic.
Wstaw tę funkcję do swojego arkusza: Narzędzia/Makra/Zarządzaj/Twój plik/Nowy moduł, po czym używaj w formułach, np.
=StrSplit(A1; CHAR(10)) <Ctrl+Shift+Enter> bo wynik jest ciągiem, więc wymagana jest notacja wektorowa.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Awatar użytkownika
Jermor
Posty: 2255
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Wyciągnięcie danych tylko z jednej linijki w komórce.

Post autor: Jermor »

Znak uzyskiwany skrótem klawiaturowym CTRL+ENTER ma kod 10.
Jesli rzeczywiście chcesz wykorzystać formuły, to możesz użyć następujących:

Kod: Zaznacz cały

dla C1 =LEWY(A1;ZNAJDŹ(ZNAK(10);A1;1)-1)
dla D1 =FRAGMENT.TEKSTU(A1;DŁ(C1)+2;ZNAJDŹ(ZNAK(10);A1;DŁ(C1)+2)-DŁ(C1)-2)
dla E1 =PRAWY(A1;DŁ(A1)-DŁ(C1)-DŁ(D1)-2)
Jeśli chcesz tylko szybko przekształcić te dane, to
Zmień wszystkie wystąpienia znaku nowej linii na inny, np średnik ("Edycja -> Znajdź i zamień" w polu "Znajdź" wpisz "\n", w polu "Zamień na" ";", zaznacz opcję "Wyrażenia regularne" i "Tylko bieżące zaznaczenie").
Po zamianie skorzystaj z polecenia "Dane -> tekst jako kolumny".
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.
fiddler
Posty: 2
Rejestracja: wt sie 14, 2018 11:42 am

Re: Wyciągnięcie danych tylko z jednej linijki w komórce.

Post autor: fiddler »

Dokładnie o to chodziło, dziękuję Wam bardzo za gotowe rozwiązanie!
Nie miałbym szans dojść do tego sam ;)
LibreOffice 5.4.4.2, Windows 7
ODPOWIEDZ