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

by Marcin

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:

[hidepost]

Download

[/hidepost]

Tyle na dzisiaj.

Marcin

{ 2 comments… read them below or add one }

Lech Leśnikowski

Pracuję od niedawna w biurze i właśnie ‚w Excel-u’. Sporo już potrafię, ale szukam czasem rozwiązań już wpisanych formuł lub formatowań warunkowych i nie wszystkie umiem rozgryźć. Czy będę mógł tu popytać o to, jak rozszyfrować lub jak wprowadzać formaty warunkowe? Mój Excel podpowiada, ale ja go nie rozumiem 🙁
Lech

Bogdan

Witaj.
Mam problem z którym nie potrafię sobie poradzić a ponieważ nie jestem zbyt obeznany z VBA może mógłbyś (przepraszam, że pisze przez Ty ale tak mi łatwiej) mi pomóc. Chodzi o zliczenie ilości linijek tekstu w komórce ale bez znaku przejścia do nowej linii. Mianowicie tekst jest wpisany jednym „cięgiem” a komórka jest sformatowana tak żeby sama zawijała tekst. Dzięki Twoim przemyśleniom „napisałem” makro które liczy ilość linijek tekstu poprawnie gdy jest znak przejścia do nowej linii natomiast gdy usunę ten znak i zastosuję wspomniane formatowanie makro nie działa. Nie wiem jaki tam jest znak, który excel wstawia i po tygodniu prób i błędów poddałem się.
Pozdrawiam
Bogdan

Leave a Comment

Previous post:

Next post: