Kilka wierszy w komórce Excela – dodatkowe przemyślenia

by Marcin on Styczeń 25, 2010

Kilka dni temu pisałem o usuwaniu z komórki Excela znaków podziału linii, które wstawiamy sobie od czasu do czasu przy pomocy kombinacji klawiszy ALT+ENTER.

W rezultacie, mamy oczywiście komórkę, w której znajduje się ciąg tekstowy podzielony na kilka wierszy. Dzisiaj napiszę o tym w jaki sposób można wybrać i wyświetlić tylko jeden, wskazany wiersz z tej komórki.

Docelowo powinno to wyglądac mniej więcej tak:

Ciąg tekstowy w Excelu - separacja wierszy

Do problemu można podejść na kilka sposobów, ja uparłem się, aby zmieścić wszystko w jednej formule oraz korzystać tylko z jednej funkcji tekstowej FRAGMENT.TEKSTU, która wybiera i wyświetla właściwy fragment (pozostałe funkcje pełnią tu rolę pomocniczą). Moja formuła (znajdująca się w komórce C12) wyglada następująco:

=JEŻELI(LUB(C12-1>DŁ(B8)-DŁ(PODSTAW(B8;ZNAK(10);""));C12<1);"Podany numer wiersza musi być wiekszy od zera i mniejszy od całkowitej ilości wierszy";FRAGMENT.TEKSTU(B8;JEŻELI(C12=1;1;SZUKAJ.TEKST("@";PODSTAW(B8;ZNAK(10);"@";C12-1))+1);JEŻELI(C12=DŁ(B8)-DŁ(PODSTAW(B8;ZNAK(10);""))+1;DŁ(B8);SZUKAJ.TEKST("@";PODSTAW(B8;ZNAK(10);"@";C12)))-JEŻELI(C12=1;0;SZUKAJ.TEKST("@";PODSTAW(B8;ZNAK(10);"@";C12-1)))))

Nasz materiał źródłowy, czyli podzielony na wiersze (przy pomocy znaku podziału linii wstawianego przez Alt+Enter) ciąg tekstowy znajduje się w komórce B8.

Dla tych, którzy wolą VBA i funkcie użytkownika przygotowałem przykład tego jak taka funkcja mogłaby wyglądać. Podobnie jak z każdym problem, i w tym przypadku rozwiązać go możemy na wiele sposobów. Ja poszedłem po linii najmniejszego oporu i wykorzystałem fukcję SPLIT(). Ma ona swoje minusy, ale w tak prostym zastosowaniu sprawdzi się doskonale.

Moja funcja użytkownika nazywa się WyciagnijDane i wymaga podania dwóch parametrów. Komórki z ciągiem tekstowym oraz numeru wiersza, który chcemy “wyciągnąć”.  Wynik działania widać na animacji poniżej.

Ciąg tekstowy w Excelu - separacja wierszy przy pomocy VBA

Kod VBA wspomnianej funkcji użytkownika wygląda tak:

Function WyciagnijDane(SkadWyciagamy As Range, _
                      WyciaganyWiersz As Integer)

Dim Przechowalnia As Long
Dim TablicaPrzechowalnia As Variant

' Sprawdzimy sobie najpierw czy w komórce wiersze sa w ogole "podzielone" znakiem
' przejscia do nowej linii. Jezeli nie to wyswietlimy cały tekst ze wskazanej komórki

Przechowalnia = InStr(SkadWyciagamy.Value, Chr(10))
If Przechowalnia = 0 Then
    WyciagnijDane = SkadWyciagamy.Value ' zwracamy tekst ze wskazanej komórki
Else
    ' sprawdzimy przy okazji czy podany numer wyciaganego wiersza nie jest za duzy
    ' Skoro mamy bowiem np. tylko trzy wiersze to nieco trudno byłoby wyświetlić
    ' wiersz o numerze np. czartym. No i oczywiście nie da się wyświetlić wiersza
    ' o numerze zero

    TablicaPrzechowalnia = Split(SkadWyciagamy.Value, Chr(10))
    If WyciaganyWiersz - 1 > UBound(TablicaPrzechowalnia) Or _
    WyciaganyWiersz = 0 Then
        WyciagnijDane = "Zdecydowanie zalecam przemysleć wartość parametru z numerem wiersza"
    Else
    ' skoro jednak jest co robic ...zabieramy sie do roboty
        WyciagnijDane = TablicaPrzechowalnia(WyciaganyWiersz - 1)
    End If

End If

End Function

Na koniec jeszcze, jak zwykle, plik z przykładem:

noaccess Rejestracja Zaloguj sie

Tyle na dzisiaj.

Marcin

Leave a Comment