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?
Wyciągnięcie danych tylko z jednej linijki w komórce.
Re: Wyciągnięcie danych tylko z jednej linijki w komórce.
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: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.
<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
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)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Wyciągnięcie danych tylko z jednej linijki w komórce.
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:
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".
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)
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.
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.
Re: Wyciągnięcie danych tylko z jednej linijki w komórce.
Dokładnie o to chodziło, dziękuję Wam bardzo za gotowe rozwiązanie!
Nie miałbym szans dojść do tego sam
Nie miałbym szans dojść do tego sam
LibreOffice 5.4.4.2, Windows 7